我正在尝试在我的WCF服务中实现自定义端点/操作扩展。我已经在websconfig中连接了我的自定义扩展程序,以便我可以装饰我的服务&和具有属性的操作。但是,在这样做后,我收到以下错误:
由于EndpointDispatcher上的AddressFilter不匹配,无法在接收方处理带有'http:// localhost:1605 / Graph.svc / Triples / vbid / abk9185 / 0 / en-us'的消息。检查发件人和收件人的EndpointAddresses是否一致。
我做了很多搜索,但我无法弄清楚这个错误意味着什么或如何解决它。有人可以帮忙吗?
这是我将我的端点和操作行为“注入”的服务:
<service name="Services.Graph" behaviorConfiguration="Services.DefaultBehavior">
<endpoint address="" binding="webHttpBinding" contract="Services.IGraphService" behaviorConfiguration="corsMessageInspection"
bindingConfiguration="LargeMessageBinding" bindingNamespace="http://icp.myorg.org">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
这是我的端点和服务行为配置:
<endpointBehaviors>
<behavior name="web">
<webHttp />
</behavior>
<behavior name="corsMessageInspection">
<endpointMessageInspector />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Services.DefaultBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
这是我的自定义端点/操作扩展配置:
<extensions>
<behaviorExtensions>
<add name="endpointMessageInspector" type="org.myorg.wcf.cors.CorsEndPointExtensionElement, org.myorg.wcf.cors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
最后这里是我的服务合同的例子:
[ServiceContract(Namespace = "http://icp.myorg.org")]
[CorsBehavior]
public interface IGraphService
{
[OperationContract]
[CorsBehavior]
[WebInvoke(Method = "*", UriTemplate = "Triples/{library}/{subjectLocalPart}/{depth}/{languageCode}")]
GraphNode ReadTriple(string library, string subjectLocalPart, string depth, string languageCode);
“CorsBehavior”是我的自定义属性,它实现了IEndPointBehavior和IOperationBehavior。
答案 0 :(得分:0)
如果您希望[WebInvoke]
属性得到尊重,那么您还需要将WebHttpBehavior(<webHttp/>
)添加到您的终端行为中。更改端点引用的行为(corsMessageInspection)以同时具有webHttp行为和自定义行为:
<endpointBehaviors>
<behavior name="corsMessageInspection">
<webHttp />
<endpointMessageInspector />
</behavior>
</endpointBehaviors>