我有一种情况,我必须创建一个服务 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。我在哪里出错了?感谢您的帮助。
顺便说一句,这里的问题很少,但似乎对我的情况没有任何作用。