缺少基于任务的 WCF 服务的帮助描述

Posted

技术标签:

【中文标题】缺少基于任务的 WCF 服务的帮助描述【英文标题】:Missing help description for task based WCF service 【发布时间】:2017-02-12 10:19:52 【问题描述】:

我目前在 WPF 应用程序中托管一些 Web 服务。我还启用了自动帮助页面来简化服务文档。每个OperationContract 都用Description 属性修饰,包含有关方法的信息。

但是,每当我查看帮助页面时,我意识到只有返回类型为 void 的方法才能在此处正确显示其 Description 属性。返回TaskTask<t> 的方法只会显示“Service at localhost:XXXXX/ServiceEndpoint”。

由于这种模式用于 IPC,我非常依赖异步操作合约,因此它们中的大多数将返回 TaskTask<t>。有什么办法可以解决这个问题,以便正确显示帮助?

namespace App

    [ServiceContract]
    public interface IMainService
    
        [OperationContract]
        [WebGet(UriTemplate = "visibility")]
        [Description("Gets the main window visibility.")]
        Task<bool> GetVisibilityAsync();

        [OperationContract]
        [WebInvoke(UriTemplate = "visibility", Method = "PUT")]
        [Description("Sets the main window visibility.")]
        Task SetVisibilityAsync(bool isVisible);

        [OperationContract]
        [WebInvoke(UriTemplate = "menu", Method = "PUT")]
        [Description("Navigates to the main menu.")]
        void NavigateToMainMenu();

        [OperationContract]
        [WebInvoke(UriTemplate = "shutdown", Method = "PUT")]
        [Description("Requests the application to shutdown.")]
        void RequestApplicationShutdown();
    

这是我的 app.config

<system.web>
    <compilation debug="false" targetFramework="4.5" />
  </system.web>

  <system.serviceModel>
    <services>

      <service name="App.MainService" behaviorConfiguration="rpcServiceBehavior">
        <endpoint binding="webHttpBinding" 
                  contract="App.IMainService"
                  behaviorConfiguration="webHttpBehavior" 
                  name="RpcEndpoint"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:25565/main"/>
          </baseAddresses>
        </host>
      </service>

    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="rpcServiceBehavior" >
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webHttpBehavior">
          <webHttp helpEnabled="true" automaticFormatSelectionEnabled="true"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>


  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

【问题讨论】:

【参考方案1】:

尝试使用其他浏览器(或隐身模式)进行调试。

解释

这是因为您可能添加了一些描述,并在浏览器上进行了检查。然后您添加了更多描述标签并在浏览器上再次检查它,而不是重新加载页面,而是打开缓存中的那个。当页面为静态时,浏览器将在浏览器中的缓存中打开页面,而不是重新加载。

【讨论】:

以上是关于缺少基于任务的 WCF 服务的帮助描述的主要内容,如果未能解决你的问题,请参考以下文章

使用 WCF 的 Http 请求中缺少授权标头

在 wcf rest 服务 C# 中使用 Stream 作为输入时缺少第一个元素

缺少相互证书的 Wcf 请求 wsse:Security

.NET Core 上的 WCF 在授权方案中缺少客户端协商方案

从VB.NET Web表单调用我的第一个WCF服务中的函数会引发错误。函数调用缺少WCF函数中的参数

我对 WCF 缺少啥?