複数のコンピュータと同じネットワーク上の1台のサーバー間のクロスプロセス通信を実装しようとしています。私が今しようとしているのは、同じマシンで動作するアプリケーション内でホストされているNetTcpBindingでWCFを使用することですが、別のマシンから接続しようとするとSSPIセキュリティー・エラーがスローされます。WCF同じネットワーク上の複数のマシン間でNetTCPを使用する
私はこのクロスマシンを実行する例がたくさんありますが、すべてが本当に避けたいapp.configファイルを含んでいます。私はこの機能を他の依存関係(つまり設定ファイル)を持たないDLLに埋め込んで、必要なサーバアドレスなどをすべて渡すだけで動作するようにしたいと考えています。とにかくこのセキュリティを(エンドポイントなどを介して)純粋にコードで設定することはありますか?
私は以下のコードでこれをすべてテストしています:
SERVER:
using System;
using System.ServiceModel;
namespace WCFServer
{
[ServiceContract]
public interface IStringReverser
{
[OperationContract]
string ReverseString(string value);
}
public class StringReverser : IStringReverser
{
public string ReverseString(string value)
{
char[] retVal = value.ToCharArray();
int idx = 0;
for (int i = value.Length - 1; i >= 0; i--)
retVal[idx++] = value[i];
string result = new string(retVal);
Console.WriteLine(value + " -> " + result);
return result;
}
}
class Program
{
static void Main(string[] args)
{
var uri = "net.tcp://" + System.Net.Dns.GetHostName() + ":9985";
Console.WriteLine("Opening connection on: " + uri);
using (ServiceHost host = new ServiceHost(
typeof(StringReverser),
new Uri[]{
new Uri("net.tcp://" + System.Net.Dns.GetHostName() + ":9985")
}))
{
host.AddServiceEndpoint(typeof(IStringReverser),
new NetTcpBinding(),
"TcpReverse");
host.Open();
Console.WriteLine("Service is available. " +
"Press <ENTER> to exit.");
Console.ReadLine();
host.Close();
}
}
}
}
がCLIENT:
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
namespace WCFClient
{
[ServiceContract]
public interface IStringReverser
{
[OperationContract]
string ReverseString(string value);
}
class Program
{
static void Main(string[] args)
{
var ep = "net.tcp://SERVER:9985/TcpReverse";
ChannelFactory<IStringReverser> pipeFactory =
new ChannelFactory<IStringReverser>(
new NetTcpBinding(),
new EndpointAddress(
ep));
IStringReverser pipeProxy =
pipeFactory.CreateChannel();
Console.WriteLine("Connected to: " + ep);
while (true)
{
string str = Console.ReadLine();
Console.WriteLine("pipe: " +
pipeProxy.ReverseString(str));
}
}
}
}
私はしかし、私はいつも私だけ呼び出すしよう関数は改行を持っている場合でも、タイムアウト例外を取得し、これに似た何かをやっている-1; sendtimeoutを1時間に設定しておけば、唯一の主な違いは、tcpの代わりに基本的なhttpを使用しています。 – ZoomVirus