WCF学习中遇到的一些问题
(1)、没有终结点在侦听可以接受消息的 http://192.168.1.124/GetPlan/GetXJYPlan。这通常是由于不正确的地址或者 SOAP 操作导致的。如果存在此情况,请参见 InnerException 以了解详细信息。
首先,我的项目里面,包含了一个WCF服务应用程序和一个Client控制台程序。将WCF服务发布到IIS之后,Client添加服务引用,将WCF的服务引用进来。把Client端的配置文件写好之后,执行报错。
<client> <endpoint address="http://192.168.1.124/GetPlan" behaviorConfiguration="webBehavior" binding="webHttpBinding" bindingConfiguration="" contract="GetPlan.IGetPlan" name="BasicHttpBinding_IService" /> </client>
解决办法:endpoint里面的地址必须写完整,即把后缀名添加进去。
(2)、远程服务器返回了意外响应: (405) Method Not Allowed。
首先说明下,我用的环境是windows server 2003系统和IIS 6.0。这个问题我也百度了很久,后来查到是iis 6.0自身的问题,IIS 6.0并没有很好的支持WCF的Method方法,通常有:get、post、head、delete、put、trace等。所以需要将下面的Method去掉,然后再重新执行。
[OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "Test")] string Test();
(3)、约定“ILoginJudge”的操作“DoWork”指定要序列化多个请求正文参数,但没有任何包装元素。如果没有包装元素,至多可序列化一个正文参数。请删除多余的正文参数,或将 WebGetAttribute/WebInvokeAttribute 的 BodyStyle 属性设置为 Wrapped。
在为WCF服务添加一个或多个参数并且带返回值的时候,报此错误。解决办法:应在服务契约上面(也就是接口类)加入一条WebInvoke的属性语句:BodyStyle = WebMessageBodyStyle.Wrapped。
WebMessageBodyStyle为枚举类型,包括四种状态:Bare——不包装请求和响应,Wrapped——包装请求和响应,WrappedRequest——包装请求,但不包装响应,WrappedResponse——包装响应,但不包装请求。
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
(4)、 “System.InvalidOperationException”类型的未经处理的异常出现在 System.ServiceModel.dll 中。其他信息: 服务“Service.Calculate”有零个应用程序(非基础结构)终结点。这可能是因为未找到应用程序的配置文件,或者在配置文件中未找到与服务名称匹配的服务元素,或者服务元素中未定义终结点。
解决办法:寄宿方式是在控制台,由于App.config配置文件中,service的name属性写错(多写一个字母),导致报错。只需要将name属性纠正即可。
<service name="Service.Calculate"> <endpoint address="http://192.168.1.124:8888/Calculate" binding="customBinding" bindingConfiguration="SimpleBinding" contract="Contracts.ICalculate" name="Calculate"> </endpoint> </service>
(WCF学习中,以后遇到的问题,将会继续更新......)