【发布时间】:2011-06-23 12:04:39
【问题描述】:
我有一个使用两个端点公开服务的 wcf 服务。一个端点用于 Web 服务调用,而另一个端点用于休息。
有没有办法确定从哪个端点调用服务器函数?
【问题讨论】:
-
我遇到的一个问题是肥皂和休息处理错误的方式不同。要在 rest 中报告错误,您需要发送一个错误的请求作为响应,这会导致 soap 中出现未经处理的异常。
标签: .net wcf wcf-endpoint
我有一个使用两个端点公开服务的 wcf 服务。一个端点用于 Web 服务调用,而另一个端点用于休息。
有没有办法确定从哪个端点调用服务器函数?
【问题讨论】:
标签: .net wcf wcf-endpoint
实际上,与我的想法相反 - 实际上很容易找出调用服务的端点。在您的服务方法中,添加以下代码行:
OperationContext oc = OperationContext.Current;
if(oc != null)
{
string wasCalledOn = oc.EndpointDispatcher.EndpointAddress.Uri.ToString();
}
但正如我所说:我会非常明智和“防御性地”使用它——不要根据调用方法的端点开始改变服务行为——那将是非常糟糕的设计!
我在几个 SOAP 端点上尝试过这个 - 不是 100% 确定如何处理 REST(但很可能相同或非常相似) - 试试看!
但是对于日志记录,这应该可以正常工作!
【讨论】:
.Segments.Last(),而不是.ToString()。
摘自博客条目here:
你只需要看看 通道上的 LocalAddress 中的当前操作上下文 方法:
OperationContext.Current.Channel.LocalAddress
【讨论】: