我希望我的WorkerRole应用程序能够进行交互。我已经编写了WCF接口/代理,我现在想要从客户端应用程序中使用它。我尝试在本地计算机上托管worker角色,跟踪端点IP地址,然后在我的客户端解决方案中,尝试添加服务引用到IP地址,但是VS2012找不到它((有趣的是它不使用相同的端口我指定,而不是它上面的下一个)。然后我尝试将我的工作角色发布到Azure,然后从那里抓取IP和连接。仍然找不到服务引用。我在我的机器和azure实例上启动了IIS。 ..但它仍然无效。
无论如何,我尝试使用svcutil而且我得到了
Metadata contains a reference that cannot be resolved: 'net.tcp://127.255.0. 2:9192/Test'. <?xml version="1.0" encoding="utf-16"?><Fault xmlns="http://www.w3.org/2003/
05 /皂信封“&GT;
Sendera:ActionNotSupported
行动“http://schemas.xmlsoap.org/ws/2 004/09 / transfer / Get”的消息不能 由于ContractFilte r不匹配而在接收器处理 EndpointDispatcher。这可能是因为合同m ismatch (发送方和接收方之间不匹配的操作)或绑定/安全性 m在发送方和接收方之间匹配。检查发件人和 接收者具有相同的合同和相同的约束力(包括 安全要求,例如消息,运输, 无)。
无论如何,我尝试只是手动连接主机和IP地址。我的客户端在调用名为search的过程时与主机建立连接。当我从客户端拨打电话时,我可以在主机上断点。不幸的是,主机意味着返回一个字符串,但客户端只接收一个空值。到底是怎么回事?以下是我的代码:
客户端:
private string serviceURL = "net.tcp://127.255.0.2:9192/Test";
private ITest GetAProxy()
{
var binding = new NetTcpBinding(SecurityMode.None);
var endpointAddress
= new EndpointAddress(serviceURL);
return new ChannelFactory<ITest>
(binding, endpointAddress).CreateChannel();
}
[DataContract]
public class Send
{
[DataMember]
public String s { get; set; }
}
[DataContract]
public class Recieve
{
[DataMember]
public String x { get; set; }
}
[ServiceContract]
public interface ITest
{
[OperationContract]
Send Search(Recieve rec);
}
主机:
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class TestClass : ITest
{
public Send Search(Recieve rec)
{
var s = new Send(); //I can breakpoint here
s.s = "This will be received as a null";
return s;
}
}
[DataContract]
public class Send
{
[DataMember]
public String s { get; set; }
}
[DataContract]
public class Recieve
{
[DataMember]
public String x { get; set; }
}
[ServiceContract]
public interface ITest
{
[OperationContract]
Send Search(Recieve rec);
}
编辑:此外,如果我在调用Search()方法时在Receive中设置属性x,则服务器将收到null。