WCF - Решение проблемы при использовании пользовательского поведения конечной точки - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь реализовать пользовательскую конечную точку / расширение операции в моей службе WCF.Я подключил свое собственное расширение в websconfig, чтобы я мог украшать свой сервис и операции с помощью атрибута.Однако после этого я получаю следующую ошибку:

Сообщение с To 'http://localhost:1605/Graph.svc/Triples/vbid/abk9185/0/en-us' не может быть обработано в получателе из-за несоответствия AddressFilter в EndpointDispatcher.Убедитесь, что конечные адреса отправителя и получателя совпадают.

Я провел большой поиск, но не могу понять, что означает эта ошибка или как ее исправить.Может ли кто-нибудь помочь?

Это служба, в которую я «внедряю» мою конечную точку и поведение операций:

<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.

1 Ответ

0 голосов
/ 06 января 2012

Если вы хотите, чтобы атрибут [WebInvoke] учитывался, то вам также необходимо добавить WebHttpBehavior (<webHttp/>) к поведению вашей конечной точки. Измените свое поведение, на которое ссылается конечная точка (corsMessageInspection), чтобы оно имело как поведение webHttp, так и пользовательское:

<endpointBehaviors>
  <behavior name="corsMessageInspection">
    <webHttp />
    <endpointMessageInspector />
  </behavior>
</endpointBehaviors>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...