积极答复者
为何服务端的Console.WriteLine没有被执行?

问题
-
大家好啊,我用VS2012(3.5 version of net framework)做了一个WCF通讯双工程序:
【WCF服务端部分】
namespace WCFTest { /// <summary> /// 服务端WCF接口,指定了回调的接口 /// </summary> [ServiceContract(CallbackContract=typeof(IClientCallBack),SessionMode=SessionMode.Required)] public interface IServiceMethod { /// <summary> /// 接受客户端的传来内容,并调用客户端名字 /// </summary> /// <param name="name"></param> [OperationContract(IsOneWay=true)] void GetName(string name); } [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)] public class ServiceMethodImpl : IServiceMethod { public void GetName(string name) { Console.WriteLine("你好客户端:"+name); IClientCallBack clientCallBack = OperationContext.Current.GetCallbackChannel<IClientCallBack>(); clientCallBack.OutPutResult("微软公司"); } } }
namespace WCFTest { /// <summary> /// 客户端 /// </summary> public interface IClientCallBack { /// <summary> /// 客户端函数 /// </summary> [OperationContract(IsOneWay=true)] void OutPutResult(string name); } }
【客户端部分】
namespace WCFConsoleTest { public class ClientResponse : IServiceMethodCallback { public void OutPutResult(string name) { Console.WriteLine("你好服务端:"+name); } } public class Program { static void Main(string[] args) { IServiceMethod sm = new ServiceMethodClient(new InstanceContext(new ClientResponse())); sm.GetName("张三"); Console.Read(); } } }
但是输出结果:
为什么服务端的“GetName”中那个“你好客户端……”没有被执行呢?谢谢了。
- 已编辑 ThankfulHeart 2012年9月22日 7:08
答案
-
哦,那么你这句代码 Console.WriteLine("你好客户端:"+name); 的输出应该在你的服务端的Console窗口去找,
而不是去客户端的Console的窗口里去找。
- 已标记为答案 ThankfulHeart 2012年9月24日 6:50
-
这样啊,那我举个比较简单的类比来描述下吧。
你就把你的服务端当着一个Asp.Net的页面,部署在IIS中,然后你在你的客户端中使用 HttpWebReqeust 去访问这个页面。
所以,你现在再看看 ServiceMethodImpl 中的代码是在客户端还是在服务端执行的呢?
http://www.cnblogs.com/artech/archive/2007/02/26/656901.html
- 已标记为答案 ThankfulHeart 2012年9月24日 6:50
全部回复
-
你的服务端和客户端是在同一个Console项目里吗?
不是同一个项目,两个项目。得空要不我发一个示例麻烦你看看。要不请maledong_work@foxmail.com和我联系,方便请留下Email我给发过去,谢谢咯~~~ -
哦,那么你这句代码 Console.WriteLine("你好客户端:"+name); 的输出应该在你的服务端的Console窗口去找,
而不是去客户端的Console的窗口里去找。
- 已标记为答案 ThankfulHeart 2012年9月24日 6:50
-
代码没问题,
public void GetName(string name)
{
Console.WriteLine("你好客户端:"+name);
IClientCallBack clientCallBack = OperationContext.Current.GetCallbackChannel<IClientCallBack>();
clientCallBack.OutPutResult("微软公司");
}
是运行在服务端Console中的,客户端输出"您好服务端:微软公司",说明clientCallBack.OutPutResult("微软公司");执行成功,
那么 Console.WriteLine("你好客户端:"+name); 这句代码就执行正确了。而该句代码的输出窗口应该是你用来宿主
ServiceMethodImpl 的 Console的exe程序。
也就是说,你有两个Console项目,一个项目宿主的服务,一个项目是测试客户端,“您好客户端:xxxx”字符串应该出现在
服务端项目的Console窗口中。
- 已编辑 Skyseer 2012年9月24日 5:24
-
这样啊,那我举个比较简单的类比来描述下吧。
你就把你的服务端当着一个Asp.Net的页面,部署在IIS中,然后你在你的客户端中使用 HttpWebReqeust 去访问这个页面。
所以,你现在再看看 ServiceMethodImpl 中的代码是在客户端还是在服务端执行的呢?
http://www.cnblogs.com/artech/archive/2007/02/26/656901.html
- 已标记为答案 ThankfulHeart 2012年9月24日 6:50