当前已使用WebGet禁用此服务的WCF元数据发布

本文关键字:WCF 元数据 服务 WebGet | 更新日期: 2023-09-27 18:21:58

首先,我已经跟踪了SO中的一些类似Q,它们遵循了一般问题列表,但这些问题尚未解决我的问题。

在过去的几天里,我一直在玩WCF服务,我开始失去理智了。我的最终目标是,我试图通过web调用获得一个方法"ping",目前当我试图通过浏览器调用我的方法时,我会得到一个空白页面(当调用httpLocalDomain/EMEACommonOperations.svc/webHttp/ping时)。

我的界面和web.config如下所示。

接口:

public interface IEMEACommonOperations
{
    *Other interface Code*
    [WebGet]
    [OperationContract]
    string Ping();
}

相关Web配置:

<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
  <service behaviorConfiguration="HttpGetMetadata" name="EMEACommonOperations">
    <endpoint address="webHttp" 
              binding="webHttpBinding" 
              bindingConfiguration="" 
              name="webHttp"
                      contract="IEMEACommonOperations" 
              behaviorConfiguration="WebHttp" />
    <endpoint address="mex" 
              binding="mexHttpBinding" 
              name="mex" 
              contract="IEMEACommonOperations" />
  </service>
</services>
<bindings>
  <basicHttpBinding>
    <binding name="webHttpBinding" 
             textEncoding="utf-8" 
             openTimeout="00:01:00" 
             receiveTimeout="00:03:00"
                     closeTimeout="00:01:00" />
    <binding name="mexHttpBinding" 
             textEncoding="utf-8" 
             openTimeout="00:01:00" 
             receiveTimeout="00:03:00" 
                     closeTimeout="00:01:00" />
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="HttpGetMetadata">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="WebHttp">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>

类别:

namespace C.EMEA.Workflow.Services.BPM.HCP.ServiceClasses
{
    public class EMEACommonOperations : ServiceBase, IEMEACommonOperations
    {
        public string Ping()
        {
             return DateTime.Now.ToString();
        }
        *Other class code*
    }
}

然而,当我运行此服务时,我会收到一个错误"此服务的元数据发布当前已禁用"。我已设法将其缩小到仅在我的行为节点输入了name属性时出现,但我不相信这是我的问题的直接来源。

我确信我的配置文件设置错误,但我就是找不到错误。

当前已使用WebGet禁用此服务的WCF元数据发布

所以经过一天的搜索,我终于注意到了我的问题。经过进一步的检查,我需要完全限定服务节点中类/接口的名称空间。我以前也这样做过,但当我做出更改时,我出现了一个新的错误,并忽略了结果。坏主意。

因此,我的配置文件的相关部分变成了:

<service name="*FullyQualifiedNamespace*.EMEACommonOperations">
    <endpoint address="webHttp"
          behaviorConfiguration="WebHttp"
          binding="webHttpBinding" 
          contract="*FullyQualifiedNamespace*.IEMEACommonOperations" />
</service>

在我更新命名空间后出现的错误是,我的接口的方法占用了多个参数,因此需要将webInvoke属性BodyStyle设置为Wrapped。