0

我有一种情况,我必须创建一个服务 A(一种代理服务),它又会调用另一个服务 B(真正的服务)。客户端 C 只知道服务 A。服务 A 将记录调用并将请求转发给 B。在从 B 获得回复后,A 记录响应并将其发送回客户端 C。实现这种情况我见过很多例子,但似乎没有任何效果。我确实有一些限制。我无法在服务 A 中添加服务 B 的引用。我也无法创建服务引用。服务 A 和 B 完全不同,它们彼此不认识。

    ---->      ---->
C           A           B        
    <----      <----      

在 A 中,在 IClientMessageInspector 的 BeforeSendRequest() 中,我已将 request.Headers.To 更新为服务 B 的 URI。但是这个方法永远不会被调用。我还附加了一个 EndPointBehavior 到它。

我的示例代码如下。我正在使用.Net 4.5。

SimpleMessageInspector 类

public class SimpleMessageInspector: IClientMessageInspector
{
  public object BeforeSendRequest(request, channel) 
  {
     request.Headers.To = new Uri("http://localhost:8087/B");
  }
}

应用程序配置...

<services>
   <service name="A" behaviorConfiguration="AServiceEndpointBehavior">
      <endpoint ... 
      <endpoint ...
      <host>
         <baseAddresses>
           <add baseAddress="http://localhost:8083/A">
         </baseAddresses> 
      </host>
    </service>
<services>
<behaviors>
   <endpointBehaviors>
      <behavior name="AServiceEndpointBehavior">
         <simpleBehaviorExtension/>
      </behavior>
   </endpointBehaviors> 
   <serviceBehaviors>
      <behavior>
         <serviceMetadata httpGetEnabled="True"/>
         <serviceDebug includeExceptionDetailsInFaults="False"/>
      </behavior>
   </serviceBehaviors> 
</behaviors>
<extensions>
  <behaviorExtensions>
   <add name="simpleBehaviorExtension" type="A.SimpleBehaviorExtensionElement, A" />
  </behaviorExtensions>
</extensions>

... 

最后,服务 A 永远不会调用服务 B。我在哪里出错了?感谢您的帮助。

顺便说一句,这里的问题很少,但似乎对我的情况没有任何作用。

4

0 回答 0