次のコードがあります。
クライアント側:
public bool Connect(string IPAdress, string Port, string UniqueName)
{
try
{
EndpointAddress address = new EndpointAddress(new Uri("net.tcp://"+IPAdress+":"+Port+"/"+UniqueName));
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
binding.TransferMode = TransferMode.Streamed;
binding.MaxReceivedMessageSize = 1024 * 1024 * 64;
m_Factory = new DuplexChannelFactory<IServerService>(this, binding, address);
m_Service = m_Factory.CreateChannel();
return true;
}
catch (Exception ex)
{
//log error
return false;
}
}
サーバ側
public void Start(string Port, string UniqueName) {
Uri baseAddress = new Uri("net.tcp://127.0.0.1:" + Port + "/" + UniqueName);
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = System.ServiceModel.SecurityMode.None;
binding.MaxReceivedMessageSize = 1024 * 1024 * 64;
binding.TransferMode = System.ServiceModel.TransferMode.Streamed;
try
{
m_ServiceHost = new System.ServiceModel.ServiceHost(this, baseAddress);
m_ServiceHost.AddServiceEndpoint(typeof(IServerService), binding, baseAddress);
m_ServiceHost.Open();
}
catch (Exception ex)
{
}
}
バッファリングされたバインディングを作成しようとしましたが、FileStream を送信しようとすると、ストリーミング転送モードを使用する必要があることを読んだため、サーバー側でインスタンスが空になりました。
クライアント側の行で次の例外が発生します
m_Service = m_Factory.CreateChannel();
コントラクトには Duplex が必要ですが、Binding 'NetTcpBinding' は Duplex をサポートしていないか、サポートするように正しく構成されていません。