【发布时间】:2014-10-24 06:32:08
【问题描述】:
我有一个 WCF 服务合同,旨在通过 TCP 网络从剪贴板发送一个字符串,并由 winform 列表框接收和显示,我已经成功连接了两个 winform,但是我无法获取要显示的 URL在列表框中。
app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<netPeerTcpBinding>
<binding name ="NewBinding0">
<security mode ="None" />
<resolver mode ="Pnrp" />
</binding>
</netPeerTcpBinding>
</bindings>
<client>
<remove contract="IMetadataExchange" name="sb" />
<endpoint address="net.p2p://URLService" binding="netPeerTcpBinding"
bindingConfiguration="NewBinding0" contract="WCFWinForm.IApplicationService"
name="Client" />
</client>
<services>
<service name="WCFWinForm.ApplicationService">
<endpoint address="net.p2p://URLService" binding="netPeerTcpBinding"
bindingConfiguration="NewBinding0" contract="WCFWinForm.IApplicationService" />
</service>
</services>
</system.serviceModel>
</configuration>
IApplicationService.cs
[ServiceContract]
public interface IApplicationService
{
[OperationContract(IsOneWay = true)]
void GetURL();
}
ApplicationService.cs
public class ApplicationService : IApplicationService
{
public void GetURL()
{
var addCopy = Clipboard.GetText(TextDataFormat.Text);
WCF.listURL.Items.AddRange(addCopy.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
}
}
WCF.cs (Winform)
public static void WCF_Load(object sender, EventArgs e)
{
//Establish connection with Service
ServiceHost svc = new ServiceHost(typeof(ApplicationService));
svc.Credentials.Peer.MeshPassword = "hehe";
svc.Open();
//Both Server and Client binding should match
NetPeerTcpBinding np2p = new NetPeerTcpBinding();
np2p.Security.Mode = SecurityMode.None;
}
private void btnSendURL_MouseClick(object sender, EventArgs e)
{
ApplicationService url = new ApplicationService();
url.GetURL();
}
你可能注意到我在ApplicationService.cs中使用了WCF.listURL,这是因为我不知道如何正确调用Form列表框; ApplicationService 中的 listURL。
【问题讨论】:
-
WinForm 应用程序应该调用服务,服务应该返回数据,然后WinForm 应该获取数据并将其绑定到控件。除了请求执行一个操作(方法)之外,服务本身应该对客户端一无所知。