Je suis en train de mettre en œuvre une communication de processus transversale qui est entre plusieurs ordinateurs et un serveur sur le même réseau. Ce que j'essaie actuellement est d'utiliser WCF avec NetTcpBinding, hébergé dans mon application qui fonctionne sur la même machine, mais quand j'essaye de me connecter à partir d'une autre machine, il lance une erreur de sécurité SSPI.WCF Avec NetTcp entre toutes les machines sur le même réseau
J'ai trouvé beaucoup d'exemples de faire cette croix-machine, mais ont tous en commun un fichier app.config que je voudrais vraiment éviter. Je veux être en mesure d'intégrer cette fonctionnalité dans une DLL qui n'a pas d'autres dépendances (c'est-à-dire des fichiers de configuration) pour laquelle je peux simplement passer toutes les adresses de serveur nécessaires, etc. et cela fonctionnera. Est-il possible de configurer cette sécurité (via les terminaux, etc.) uniquement en code?
Je teste tout cela avec le code ci-dessous:
SERVEUR:
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));
}
}
}
}
que je fais quelque chose de semblable à ce que je reçois cependant toujours une exception de délai d'attente, même si la fonction que j'essaie de n'appeler a le retour de la ligne 1; et avoir le sendtimeout mis à 1 heure la seule différence principale est que j'ai utilisé base http au lieu de tcp des idées sur ce que je dois faire. – ZoomVirus