继续学习WCF,我正在尝试编写一个小程序,只需点击一下按钮就可以从texbox1中获取工作,将其传递给ServiceContract并恢复其长度。
这是我有多远。
Form1.cs中:
...
wcfLib.Service myService = new wcfLib.Service();
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = Convert.ToString( myService.go(textBox1.Text) );
}
...
和wcf文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace wcfLib
{
[ServiceContract]
public interface IfaceService
{
[OperationContract]
int wordLen(string word);
}
public class StockService : IfaceService
{
public int wordLen(string word)
{
return word.Length;
}
}
public class Service
{
public int go( string wordin )
{
ServiceHost serviceHost = new ServiceHost(typeof(StockService), new Uri("http://localhost:8000/wcfLib"));
serviceHost.AddServiceEndpoint(typeof(IfaceService), new BasicHttpBinding(), "");
serviceHost.Open();
int ret = **///// HOW SHOULD I PASS wordin TO StockService to get word.Length in return?**
serviceHost.Close();
return ret;
}
}
}
我现在无法弄清楚的是,我如何将上面的wordin变量传递给ServiceContract?
答案 0 :(得分:1)
您需要在表单中创建客户端并直接调用wordLen()...只有从IfaceService
继承的类才能被称为WCF服务。所以:
// You'll have to create references to your WCF service in the project itself...
// Right-click your form project and pick 'Add Service Reference', picking
// 'Discover', which should pick up the service from the service project... else
// enter http://localhost:8000/wcfLib and hit 'Go'.
// You'll have to enter a namespace, e.g. 'MyWcfService'... that namespace is
// used to refer to the generated client, as follows:
MyWcfService.wcfLibClient client = new MyWcfService.wcfLibClient();
private void button1_Click(object sender, EventArgs e) {
// You really shouldn't have the client as a member-level variable...
textBox2.Text = Convert.ToString(client.wordLen(textBox1.Text));
}
如果您的Service
类要承载WCF服务,则需要将其作为自己的可执行文件并运行...将go()
中的代码放在Main()
中
或者在IIS中托管您的WCF服务......更容易!
的修改
IIS = Internet信息服务...基本上通过网络托管WCF服务。
要在IIS中托管,请创建一个新项目“WCF服务应用程序”。您将获得web.config和默认接口以及.svc文件。重命名这些,或将新项目WCF服务添加到项目中。如果你走这条路,你将不得不阅读部署到IIS的一些内容,但是为了在Visual Studio中进行调试,这很有效。
要拆分成两个应用程序,只需将表单设为自己的项目......通过应用程序的配置文件设置服务引用;你只需将它指向机器或网站的地址,例如http://myintranet.mycompany.com:8000/wcflib或http://myserver:8000/wcflib。
感谢投票!
答案 1 :(得分:0)
你肯定已经把事情做好了。您不希望在Go方法中创建ServiceHost,或者至少,您永远不会在客户端调用的任何方法中创建它,因为如果尚未创建服务,客户端如何调用它? / p>
启动WCF中的服务,然后您可以从远程客户端调用其方法。 EG,这是您服务的Main():
ServiceHost serviceHost = new ServiceHost(typeof(StockService), new Uri("http://localhost:8000/wcfLib"));
serviceHost.AddServiceEndpoint(typeof(IfaceService), new BasicHttpBinding(), "");
serviceHost.Open();
Console.WriteLine("Press return to terminate the service");
Console.ReadLine();
serviceHost.Close();
然后,对于您的客户端,您将在Visual Studio中使用“添加服务引用”(右键单击解决方案资源管理器中的项目以查找此菜单选项)并输入服务的地址。 Visual Studio将为您的服务创建代理,这是您在客户端上实例化和使用的内容。 EG:
MyServiceClient client = new MyServiceClient();
textBox2.Text = Convert.ToString( client.wordLen(textBox1.Text) );