当前已使用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属性时出现,但我不相信这是我的问题的直接来源。
我确信我的配置文件设置错误,但我就是找不到错误。
所以经过一天的搜索,我终于注意到了我的问题。经过进一步的检查,我需要完全限定服务节点中类/接口的名称空间。我以前也这样做过,但当我做出更改时,我出现了一个新的错误,并忽略了结果。坏主意。
因此,我的配置文件的相关部分变成了:
<service name="*FullyQualifiedNamespace*.EMEACommonOperations">
<endpoint address="webHttp"
behaviorConfiguration="WebHttp"
binding="webHttpBinding"
contract="*FullyQualifiedNamespace*.IEMEACommonOperations" />
</service>
在我更新命名空间后出现的错误是,我的接口的方法占用了多个参数,因此需要将webInvoke属性BodyStyle设置为Wrapped。