首页 新闻 会员 周边

以wcf为服务端, socket 为客户端. 请问有具体的参考示例吗? 或是相关对于的方法思路.

0
悬赏园豆:20 [待解决问题]

以wcf作为服务端, socket 为客户端. 请问有具体的参考示例吗? 或是相关对于的方法思路.

wcf 服务端代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Contract;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace MyServices
{
    [ServiceContract]
    interface ICalcContract
    {
        [OperationContract]
        int Add(int a, int b);
    }

    class CalcService : ICalcContract
    {
        #region CalcContract 成员

        public int Add(int a, int b)
        {
            return a + b;
        }

        #endregion
    }

    class CalcHostServices 
    {
        static void Main(string[] args)
        {

            Uri tcpBaseAddress = new Uri("net.tcp://localhost:8056/CalcService");

            using (ServiceHost calculatorSerivceHost = new ServiceHost(typeof(CalcService), tcpBaseAddress))
            {
                NetTcpBinding tcpBinding = new NetTcpBinding();
                calculatorSerivceHost.AddServiceEndpoint(typeof(ICalcContract), tcpBinding, string.Empty);                

                calculatorSerivceHost.Opened += delegate
                {
                    Console.WriteLine("Calculator Service has begun to listen ... ...");
                };

                calculatorSerivceHost.Open();

                Console.Read();

            }

        }
    }
}

下为socket客户端.  因为不知道怎么与wcf通讯所以下面代码是有错误的. 望高手多多指教.

  int port = 8056;
  string host = "127.0.0.1";
  IPAddress ip = IPAddress.Parse(host);
  IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
  
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket Console.WriteLine("Conneting..."); c.Connect(ipe);//连接到服务器
string sendStr = "hello!This is a socket test"; byte[] bs = Encoding.ASCII.GetBytes(sendStr); Console.WriteLine("Send Message"); c.Send(bs, bs.Length, 0);//发送测试信息
string recvStr = ""; byte[] recvBytes = new byte[1024]; int bytes; bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息 recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); Console.WriteLine("Client Get Message:{0}", recvStr);//显示服务器返回信息 c.Close();
曾斌的主页 曾斌 | 初学一级 | 园豆:162
提问于:2012-09-12 17:28
< >
分享
所有回答(3)
0

HTTP协议的话,你的发送基于HTTP协议的数据包;

TCP的话,好像不行。

我回头测试下。

Launcher | 园豆:45045 (高人七级) | 2012-09-12 17:39
0

Socket理论上可行,但实际上要处理消息头,和消息响应,因此实际通信的时候必须完全清楚通信协议才可行,而我也没仔细研究过WCF每种协议的请求响应格式。

不过退一步可以使用WCF提供的RESF模式,它是以WCF为服务端提供RESF服务,客户端可以通过HTTP协议发送HTTP请求来访问服务端,也就是说支持IE浏览器直接访问服务端。我这里还特意给了一份RESF模式提供的文件下载示例项目:http://www.cnblogs.com/qldsrx/archive/2012/04/08/2437583.html

秦楼东 | 园豆:913 (小虾三级) | 2012-09-14 11:11
0

即使使用wcf中的消息契约也还是要自己要处理消息头和消息响应吗

LowerAI | 园豆:562 (小虾三级) | 2012-12-04 18:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册