目前,使用WebGet禁用此服务的WCF元数据发布

时间:2014-09-16 11:34:47

标签: c# wcf web-config

首先,我已经跟随了一堆类似问题的关于通用问题列表的问题,但这些还没有解决我的问题。

过去几天我一直在玩WCF服务,我开始迷失自己的想法。我的最终目标是我尝试使用方法" ping"通过网络电话可用,目前当我尝试通过浏览器调用我的方法时,我得到一个空白页面(当调用http LocalDomain / EMEACommonOperations.svc / webHttp / Ping时)。

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

界面:

public interface IEMEACommonOperations
{
    *Other interface Code*

    [WebGet]
    [OperationContract]
    string Ping();
}

相关网站.Config:

<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*
    }
}

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

我很确定我的配置文件设置错误,但我无法发现错误。

1 个答案:

答案 0 :(得分:0)

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

因此配置文件的相关部分变为:

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

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