このコードを使用して、WCF サービスでクライアント IP を取得します。
public string GetClientIP()
{
var context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
var endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
return ip;
}
実行しようとすると、「System.ServiceModel.Channels.MessageProperties オブジェクトが破棄されました」という例外がスローされます。
このコードは、1 つの WCF サービスでは機能しません。その web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<customErrors mode="Off" />
<identity impersonate="false" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<directoryBrowse enabled="true" />
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
レストWCFサービスです。次のような発信者サービス メソッドの署名:
[WebInvoke(Method = "POST", UriTemplate = "{someParameter}/MyMethod")]
public string MyMethod(string someParameter, Stream stream)
{
var ip = GetClientIP();
}
Google で何も検索しません。アイデアはありますか?