添加服务引用和Auto-attaching(一)

WCF Tools Team博客的博文“介绍VS2008中的WCF工具 ”,已经提到添加服务引用(Add service reference…)和Auto-attaching。现在我们就具体介绍如何使用这两个功能来简化客户端的开发与调试工作以及使用中的一些技巧。

这一篇我们先向大家介绍添加服务引用(Add service reference…)。
熟悉Web Service开发的程序员对添加服务引用应该并不陌生。在创建某个服务的客户端程序时,并不需要从头开始编写客户端的底层通信和交互代码,可以通过输入服务地址来添加服务来让Visual Studio生成客户端代理,这样访问服务就像访问本地组件一样,而不需要去关心通信的细节。如果创建的客户端程序项目和服务程序项目处在同一个解决方案里(很多开发者在开发服务时,也会同步开发客户端程序),还可以通过Visual Studio来帮助我们“发现(Discovery)”服务,并添加服务引用。
 
现在开发WCF Service的程序员也可以得益于这些功能了。如果从WCF Service Library (或者WCF 节点下的Sequential Workflow Service Library 和 State Machine Workflow) 项目模板创建一个项目,那么这些功能就已经具备。
  
下面我们来看一下如何使用:
1.创建一个客户端程序,可以是一个Windows Console程序。
2. 在同一解决方案里添加一个WCF Service Library。如图:
3.Build WcfServiceLibrary1。
4. 右键ConsoleApplication 1 ,在上下文菜单中选择 “添加服务引用“ (Add Service Reference) .
5. 此时可以看到一个对话框 :
6. 如果已经知道服务的地址,可以直接在Address 栏输入地址来添加服务 ,单击“Go 。可以找到这个地址对应的服务。
7. 如果想添加同一个解决方案里的服务,可以先单击“发现”来寻找服务。找到服务后,选中需要在客户端程序生成引用的服务,然后单击确定,这个时 WcfSvcHost 就会自动启动来 HOST 服务。秒以后,可以看到客户端自动生成了服务代理代码:
 
通过上面的步骤在客户端完成了添加服务引用, 现在可以访问服务了,只需要通过下面两行代码就可以调用服务端的一个方法:
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
client.GetData(0);
使用技巧及注意点:
1.       1。 vs2008 WCF 节点下 有四个项目模板,但是Syndication Service Library项目 并不具备这个功能,这是因为这个服务并没有提供Metadata
2.       2。 在“发现”服务前,必须先 Build 服务端项目(也就是上文第 3 步必不可少) 以保证添加的服务引用是最新的 。在将来版本的Visual Studio 我们会做进一步的简化
下一篇将介绍如何借助Auto-Attaching来简化程序调试。
可以使用以下代码实现一个简单的TCP服务器: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define PORT 8080 int main(int argc, char const *argv[]) { int server_fd, new_socket, valread; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[1024] = {0}; char *hello = "Hello from server"; // Creating socket file descriptor if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // Forcefully attaching socket to the port 8080 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // Forcefully attaching socket to the port 8080 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); } if (listen(server_fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen)) < 0) { perror("accept"); exit(EXIT_FAILURE); } valread = read(new_socket, buffer, 1024); printf("%s\n", buffer); send(new_socket, hello, strlen(hello), 0); printf("Hello message sent\n"); return 0; } ``` 这段代码创建了一个TCP服务器,监听端口8080。当有客户端连接时,服务器会发送“Hello from server”消息给客户端,并在控制台输出客户端发送的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值