4

WCFホストを実行する方法は次のとおりです。

var baseAddress = new Uri("net.tcp://localhost:2222/blah");

var binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Transport;

var sh = new ServiceHost(typeof(MyServiceImpl), baseAddress);
sh.AddServiceEndpoint(typeof(IMyService), binding, baseAddress);
sh.Open();

これが私のクライアントです:

Uri uri = new Uri("net.tcp://localhost:2222/blah");
var address = new EndpointAddress(uri);
var binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Transport;
var client = new MyServiceClient(binding, address);
client.Open();

Mono 2.10 ランタイムを使用してクライアントとサーバーの両方を実行すると、すべてが機能します。しかし、サーバーが .NET 4.0 で実行されている場合、System.IO.IOException: Read failure ---> System.Exception: An existing connection was forcibly closed by the remote host. また、すべて正常に動作することも確認しましたbinding.Security.Mode = SecurityMode.None。これらの 2 つのランタイムを適切に機能するセキュリティと相互運用できる可能性はありますか?

4

1 に答える 1

5

残念ながら、NetTcpBindingMono でのサポートは非​​常に限定されており、いかなる種類のセキュリティもサポートしていません。

NetTcpBinding.csのソースだけを見るとそう見えるかもしれませんが、実際のバインド要素を見ると、実装されていないメソッドがたくさんあることがわかります。

数日前、新しい WCF 構成システムに取り組んでいるときに実際に同じ問題に遭遇し、セキュリティを操作したいと思っていましたNetTcpBinding。なぜそれが機能しないのかを調査したところ、実装されていないものが多すぎることに気付きました。おそらくそれを機能させるためのより大きなタスクです。

また、デフォルトでNetTcpBindingは を使用していることにも注意してくださいWindowsStreamSecurityBindingElement。残念ながら、基になるトランスポート メカニズムに関するドキュメントは見つかりませんでした。

.NET 4.5 を使用している場合はBasicHttpBinding、または newBasicHttpsBindingを使用します (MonoTouch でも間もなく利用可能になります)。

于 2013-01-23T02:36:44.400 に答える