wcf问题集锦
1.处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
HTTP 错误 404.3 - Not Found
由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
解决办法:以管理员运行命令:C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe -i
HTTP 错误 500.21 - Internal Server Error
处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
解决办法:
原因:在安装Framework v4.0之后,再启用IIS,导致Framework没有完全安装
解决:开始->所有程序->附件->鼠标右键点击“命令提示符”->以管理员身份运行->%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
如果还不行,可检查IIS的应用程序池,是否使用集成模式,如果不是则改成集成模式
2.WCF Add Service Reference gotcha with Windows Server
We recently switched from developing in Vista to Windows Server 2003. Someone had the bright idea that we should develop in the same environment the application is going to be hosted on. Go figure.
What that meant is that you run into wierd issues like this one. When trying to add a Service Reference to a WCF service hosted under IIS you keep getting this 'Add Service Reference Error':
Metadata contains a reference that cannot be resolved: 'http://merill/Services.Host/ClientProfile.svc?wsdl'.
The WSDL document contains links that could not be resolved.
There was an error downloading 'http://merill/Services.Host/ClientProfile.svc?xsd=xsd0'.
The underlying connection was closed: An unexpected error occurred on a receive.
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
An existing connection was forcibly closed by the remote host
Metadata contains a reference that cannot be resolved: 'http://localhost/Services.Host/ClientProfile.svc'.
Metadata contains a reference that cannot be resolved: 'http://localhost/Services.Host/ClientProfile.svc'.
If the service is defined in the current solution, try building the solution and adding the service reference again.
The key part of this message is the reference to the downloading of the xsd. When I tried accessing the .svc url in a browser it worked fine, but trying to access the .svc?xsd=xsd0 brings up the generic 'cannot display webpage' message.
When you unleash your weapon (Process Monitor) on the csc.exe process (this is the compiler generating the xsd) you'll realise that the IIS identity IIS_WPG does not have access to the Windows\Temp folder. Give enough rights to the folder and viola problemo solved.
Reference:http://merill.net/2008/04/wcf-add-service-reference-gotcha-with-windows-server/
3. gsoap 调用 WCF 415 错误 (soap: 非托管c++ 客户端的开发(gsoap))
问题: gsoap调用 WCF 返回错误415 unsported media type
我要wireshark抓包,发现WCF返回: Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'.
分析: WCF server端 basicHttpBinding 只支持 soap 1.1,而client端 gsoap生成的客户端代码 默认为 soap1.2
解决:gsoap 的soapcpp2的参数 -1 为soap 1.1 -2为soap1.2
例如:D:\GSoap\gsoap-2.8\gsoap\bin\win32\soapcpp2 -i -x -d D:\GSoap\recycle -C D:\GSoap\recycle.h -I D:\GSoap\gsoap-2.8\gsoap\import -1
4.C++的gsoap客户端与基于WCF的C#服务端Web Service交互的问题
服务端使用SOAP 1.2,在Windows下用C#开发;客户端使用跨平台的gsoap开发包(版本为2.7.15),在Linux下使用C++开发。
(1)证书问题。
当Web Service使用SSL/HTTPS进行通信时,跨平台的证书问题怎么处理?如果你对证书非常了解,那么没问题,你可以在十几分钟内就搞定它。但是如果你根本就不知道”自签名的证书“是怎么一回事的话,那就有得受了。证书还牵涉到你所使用的SOAP开发包,因为不同的开发包要求使用的证书格式也不同。例如,gsoap就要用pem格式的证书文件。这个文件怎么得到?自签名的证书又是怎么一回事?它跟Web Service有什么关系?这个真不是一两句话就可以说得清楚的,恐怕要从”Web Service是什么“来说起了。但是我也不可能长篇大论地打几万字上来,所以有些基础的概念还是请您自己挪步google吧。
文章来源:http://www.codelast.com/
(2)SOAP 1.1/1.2的兼容性问题。
当服务端和客户端使用的SOAP版本不同时,能不能配合上?我没有试过,当然,我的直接想法就是:服务端用哪个版本,客户端就用哪个版本的SOAP,所以事先双方最好确定一下各自的版本。但是就算是同一版本,由于服务端和客户端不是同一平台的,也有可能出问题。例如,我的Web Service服务端使用SOAP 1.2,我使用gsoap做的client死活就是无法调用它。这个问题还没解决,但是我说一下其中的几个问题。
一是HTTP header中的SOAPAction的问题。使用gsoap开发,可以生成调试信息,把发送的HTTP头信息及XML数据保存到文件中(默认文件名为“SENT.log”,文件名可以在运行时(runtime)来修改),打开它,可以看到有用的调试信息,以帮助你确定问题所在。gsoap 2.7.15的pdf文档里写得很清楚,soapcpp2默认生成的代理类是SOAP 1.1的,如果要生成SOAP 1.2的,请使用-2参数,但是在某个国外的技术论坛中,我看到一些人说-2参数有时候是无效的(这种说法未经证实),到底是SOAP 1.1还是SOAP 1.2,其实是由.nsmap文件来控制的。.nsmap文件保存的是XML命名空间表,该文件是soapcpp2编译器生成的。
5.关于 WCF的 传统用法 几点忠告:
>WCF不支持 List 等一切 集合类型 (一切集合 都会被 WCF 转换为 数组)
>WCF不支持 Hashtable 等大部 哈希类型 (大部哈希 都会被 WCF 转换为 Dictionary<object,object>)
——部分特殊情况 WCF 连 Dictionary<object, object> 都不支持
>注意在 服务端 对 需要的对象 声明特性 : [KnownType(typeof(TestVModel_User))]
>建议: WCF穿透对象 尽量不要出现 List 和 Hash —— 可以的话 尽量用 T[] 和 Dictionary<K, V>
>警告: 使用 Hashtable 就是一个 不折不扣 的 埋坑行为。
*******VS项目属性里好像有对这些的设置,具体没试过
关于 WCF的 另类用法 几个方案:
PS: "穿透实体" = "视图实体"
"数据实体" 指 保存有效数据的 实体对象
>方案一 : WCF 传统用法 : 写服务端、生成客户端代理类
>优势 : 代码简单;
用 穿透实体 保护 数据实体;
>劣势 : 数据类型 狭隘; 存在 不稳定因素;
服务端改变, 所有 客户端代理类 需 重新生成 (最难维护 的 环节);
>方案二 : WCF 穿透对象 只使用 byte[]
>优势 : 通讯量小,速度快,类型广泛,数据稳定;不需要重新生成 代理类;
>劣势 : byte[] 反向解析 问题:
>如果 是 反序列化 :则 要求客户端 存在 实体类程序集 —— 无法保护 数据实体;
>方案三 : WCF 穿透对象 只使用 string
>优势 : 通讯量小,速度快,数据稳定,跨Java等平台,不需要重新生成 代理类;
>劣势 : >只能兼容 XML 和 JSON 类型 —— 类型依然狭隘;
>string 明文, 可能存在 安全问题;
>需要客户端 反解析 JSON 或 XML 字符串 —— 代码多了一点;
>方案四 : >系统内网电脑 WCF 使用 byte[] —— 共享 实体类程序集
>系统外网电脑 另外开辟 Web服务, 另外开辟 穿透实体;
>优势 : 在 有安全机制 的 内网, 使用 稳定快速的 方式;
>劣势 : 在 有风险 的 外网, 使用 另外的暴露 方式;
最后 : 实体类程序集
>只包含 视图实体类, 字段属性 —— 结构简单;
>并不包含 逻辑代码, 被外部引用 —— 真的会有 安全风险 么?
当然, 任何一种方案, 难度都差不多 —— 更多的都是 后期维护的 难度不同;
——————————————————————————————————————————————————————
关于 WCF的 维护测试:
>如果 没有标记 [DataMember] :
>如果 部分标记 [DataContract] 和 [DataMember] —— 则未标记 属性 会丢失(不会出现在 代理类中)
>如果 不标记任何 [DataContract] 和 [DataMember]
>且 不标记 [Serializable] —— 完全正常
>若 标记 [Serializable] —— 所有属性名 都会被加上 __BackingField 后缀
>如果 增加/减少 穿透对象的属性 :
>减少 穿透对象 属性, 但是 代理类却没有更新 —— 客户端一切正常, 减少属性 无值
>增加 穿透对象 属性, 但是 代理类却没有跟新 —— 客户端一切正常, (代理类 ExtensionData 有增加值)
>如果 增加/减少 服务函数 :
>如果 增加 服务函数 :
>如果 新函数 返回 新穿透对象, 但是 代理类却没有更新 —— 客户端 在不掉用新函数时(客户端根本就没有新函数) 一切正常
>如果 减少 服务函数, 但是 代理类却没有更新 —— 客户端 在不调用删除函数时 一切正常
>如果 函数参数列表 增加/减少 函数参数 :
>增加服务函数 末尾参数, 但是 代理类却没有更新 —— 客户端一切正常, 新参数 无值 (我已经被 彻底 雷死了)
>新增服务参数 乱序参数, 但是 代理类却没有更新 —— 客户端一切正常, 新参数 无值 (我已经被 完全 雷死了)
>减少服务参数 任意参数, 但是 代理类却没有更新 —— 客户端一切正常, 新参数 无值 (我已经被 无语了)
>打乱服务参数, 但是 代理类却没有更新 —— 客户端传入参数 异常 :
>如 :
>最开始 服务端、客户端 参数表: testArg, testArg2, testArg3
>服务端 修改为 testArg2, testArg, testArg3 —— 则 服务端 仅有 testArg testArg3 有值
>服务端 修改为 testArg, testArg3, testArg2 —— 则 服务端 仅有 testArg testArg2 有值
>结论 : WCF 的 稳定性&维护性 远远超过 我之前的 预期
问题 :“添加服务引用” 填写好地址后 出现错误,信息如下:
下载“http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/”时出错。
无法连接到远程服务器
由于目标计算机积极拒绝,无法连接。 127.0.0.1:8732
元数据包含无法解析的引用:“http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/”。
没有终结点在侦听可以接受消息的 http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/。这通常是由于不正确的地址或者 SOAP 操作导致的。如果存在此情况,请参见 InnerException 以了解详细信息。
无法连接到远程服务器
由于目标计算机积极拒绝,无法连接。 127.0.0.1:8732
如果该服务已在当前解决方案中定义,请尝试生成该解决方案,然后再次添加服务引用。
出现以上错误信息有很多种情况,首先查看配置 地址、绑定、协议是否正确?其次看一下防火墙设置是否关闭,(有一次查问题查了一天本机没问题,跨机器就有问题,最后查到是防火墙的问题)
已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。
错误:已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。
或者
错误:反序列化操作“GetAllUserData”的响应消息的正文时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。 行 1,位置 8834。
解决方案 :
加上红色部分即可 。
解决方案 :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ISyncService" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" >
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:8732/SyncService/" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ISyncService" contract="SyncServiceProxy.ISyncService"
name="WSHttpBinding_ISyncService">
</endpoint>
</client>
</system.serviceModel>
</configuration>
WCF:(413) Request Entity Too Large.
Request Entity Too Large。
原因是WCF默认接受的数据最大是几十KB(具体多少没有亲测过,网上有说最大64KB),一旦传给WCF函数的数据量超过这个值,就会报上面的错误。
解决方法是在WCF的服务端和客户端同时加上配置:
<system.serviceModel> <bindings> <basicHttpBinding> <binding maxReceivedMessageSize="10485760"> </binding> </basicHttpBinding> </bindings> </system.serviceModel>
问题: 在IIS中部署好WCF服务站点后,本机访问服务无问题,局域网中其他电脑访问不到
1、问题描述
在IIS中部署好WCF服务站点后,本机访问服务无问题,局域网中其他电脑访问不到。
2、解决方法
(1)控制面板 -> Windows防火墙 -> 高级设置
(2)属性
(3)配置文件(我只改了“专用配置文件”)-> “入站连接”设置为“允许”
设置完成后,局域网中其他电脑就可访问到部署在IIS上的WCF服务了。
1、服务器端Web.config配置文件,增加如下部分:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_NoneSecurity" maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
<readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
<security mode="None"/>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
2、客户端app.config配置文件,修改或增加红色部分:
<wsHttpBinding>
<binding name="WSHttpBinding_IService1">
<security mode="None" />
</binding>
</wsHttpBinding>
wcf问题集锦的更多相关文章
- WCF问题集锦:未依照DataMember定义的名称序列化对象
今遇到WCF序列化BUG,代码例如以下: /// <summary> /// 包括数据的返回对象 /// </summary> /// <typeparam name=& ...
- WCF问题集锦:ReadResponse failed: The server did not return a complete response for this request.
今日.对代码进行单元測试时.发现方法GetAllSupplyTypes报例如以下错误: [Fiddler] ReadResponse() failed: The server did not retu ...
- IIS7.5 部署WCF项目问题集锦
HTTP 错误 500.19 - Internal Server Error 描述:配置错误: 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的 (overri ...
- [WCF实践]1.WCF使用net.tcp寄宿到IIS中
一.IIS部分 环境:Windows Server 2008 R2 1.安装WAS,如下图所示: 2.网站net.tcp协议绑定,如下图所示: 3.网站启用net.tcp,如下图所示: 二 ...
- WCF使用net.tcp寄宿到IIS中(转)
一.IIS部分 环境:Windows Server 2008 R2 1.安装WAS,如下图所示: 2.网站net.tcp协议绑定,如下图所示: 3.网站启用net.tcp,如下图所示: 二 ...
- 解决WCF“接收对 http://xxx.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致"
最近在工作中新加了一个接口,本地调试的时候,直接抛出“接收对 http://xxx.svc 的 HTTP 响应时发生错误.这可能是由于服务终结点绑定未使用 HTTP 协议造成的.这还可能是由于服务器中 ...
- WCF使用net.tcp寄宿到IIS中
一.IIS部分 1. 安装WAS,如下图所示: 2. 网站net.tcp协议绑定,如下图所示: 3. 网站启用net.tcp,如下图所示: 二.WCF代码部分 1. DesignCaseService ...
- 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!
看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
随机推荐
- Swift3.0 基础学习梳理笔记(一)
本篇是我在学完一遍基础语法知识的时候,第一遍复习,我一遍梳理一遍记录的笔记.同时分享给像我一样在学习swift 的猿友们. 本篇可能过于冗长.所以所有的参考资料都分模块的写在palyground 里, ...
- shell入门-系统和用户的配置文件
变量分为系统变量和用户自定义变量,他们的配置文件当然分为系统环境变量配置文件和用户环境变量控制文件 1.规定环境变量的配置文件 [root@wangshaojun 111]# vim /etc/pro ...
- jquery.html5uploader.js 上传控件
插件地址:http://blog.csdn.net/never_say_goodbye/article/details/8598521 先上个效果图: 相比来说,效果还是很不错的 使用MVC3做服务器 ...
- SpringMVC 学习笔记(文件的上传和下载)
在web项目中会遇到的问题:文件上传 文件上传在前端页面的设置:form表单 设置 input 类型 文件上传的请求方式要使用post,要将enctype设置为multipart/form-data ...
- 应用HtmlInputFile进行大文件上传 解决asp.net上传大文件默认文件大小限制
选择一个文件,也可以正确上传至服务器,但您会发现文件大于2048的时候,出现:Internet Explorer显示 "The page cannot be displayed - Cann ...
- 关于android的一些博文收集
Java网络编程总结 http://www.cnblogs.com/oubo/archive/2012/01/16/2394641.html Android应用系列:双击返回键退出程序 http:// ...
- 微信 python搭建服务器
1. 搭建服务以web.py网络框,python,腾讯云服务器为例介绍. 1)安装/更新需要用到的软件 安装python2.7版本以上 安装web.py pip install web.py sudo ...
- 1. csrf 简介
浅谈CSRF CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 年曾被列为互联网 大安全隐患之一,也被称为“One Click A ...
- JQuery获取body的大小
$('body').height(); $('body').width();
- IOS 获取系统通讯录
进入正题 获取系统通讯录,不想多讲,留下链接http://my.oschina.net/joanfen/blog/140146 通常做法: 首先创建一个ABAddressBookRef类的对象add ...