知识大全 .Net整合其他平台的一些探讨

Posted

篇首语:笔落惊风雨,诗成泣鬼神。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .Net整合其他平台的一些探讨相关的知识,希望对你有一定的参考价值。

.Net整合其他平台的一些探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  整合分布式应用程序经常是一件非常困难并且错综复杂的任务 即使是最富有经验的开发者也可能会觉得头疼 当应用程序在不同的操作系统以及涉及不同的程序平台时 这个集成问题变得尤其复杂 虽然说 Web服务承诺可以减轻程序员完成集成任务的困难程度 但是也可能给程序员们带来一些意想不到的麻烦 在这里我们将把一个应用程序和一个PHP Web服务连结起来 以学习一些整合分布式应用程序的方法 以及必要的应对措施 包括运行什么以及不用去做什么    这个Web服务在一个Apache服务器上运行 并且使用PHP开发 它从各种微软新闻组检索新闻摘要以及它们的关联的文本 即使由这个服务提供的数据可以直接使用内部的 Net对象存取 但是这个服务还是将使用并提供一个连接到非 Net平台上的不错的演示 我们这里要讨论的实例基于 Net beta 版  

  创建一个Web服务代理

  Visual Studio NET提供了一个出色的机制用于自动地生成可用于存取远程Web服务的代理对像 因此 要首先尝试使用这些函数来导入由PHP服务提供的Web服务描述语言(Web Services Description Language WSDL)文件 还可以使用 Net SDK的WSDL exe命令行公用程序 不幸的是 在使用向导导入WSDL之后 并不能成功地创建一个代理 所以我必须把导入原始的WSDL文件后由VS Net生成的文件转换为WSDL

  ◆把模式域名空间从改成 然后清除所有的当WSDL导入过程中由VS Net添加的 q 域名空间

  ◆删除 xmlns:tm=和xmlns: mime= 名字空间 因为这个应用程序中不需要包含这些

  ◆删除类型元素 因为原始的 WSDL文档 并没有包含Web服务的模式信息的指定的元素区段

  ◆改变输入输出元素消息属性值为包含tns域名空间前缀的形式:

  <portType name= nntpSoapPortType > <operation name= getheaders

  parameterOrder= newsgroup numitems > <input message= tns:getheaders /> <output message= tns:getheadersresponse /> </operation> <operation name= getarticle

  parameterOrder= newsgroup article > <input message= tns:getarticle /> <output message= tns:getarticleresponse /> </operation> </portType>

  在进行了下面的这些微小的改变 VS Net向导能够读取WSDL并且自动地生成一个代理 在编译了这个代理之后 它被包含在一个ASP NET页面中 然而 当这个ASP Net页面被执行 message does not have a correct SOAP root XML tag 这个错误被当作一个SOAP错误从Web服务中返回

  为了精确地评估这个错误 代理调用被一个名为Proxy Trace的公用程序使用 以便代理生成SOAP包装 这可以通过把下列代码添加进ASP Net页面来实现

  msNews Proxy = new System Net WebProxy(//localhost: );

  在察看了由 Net代理生成的SOAP包装之后 我有点奇怪为什么会返回这个错误 因为实际上一个相对的SOAP包装被生成并被发送到Web服务 即使在尝试了好几个转化成代理代码之后这个错误依然持续 代码段列表 显示了从PHP Web服务返回的完整的SOAP错误包装

  在使用VS Net中创建的代理对象的好几个把ASP Net页面与PHP Web服务连结的不成功的尝试之后 我决定从头开始创建SOAP包装以便执行更有效的程序调试 起先 它看起来好像由 Net代理生成的模式域名空间可能是问题的关键 因为 Net使用 模式规范而PHP服务使用的是 版本的规范

  然而 我把自定义的SOAP包装改为用 版本代替 版本 错误依然存在 在尝试了好几个其他的小的改变之后 我决定把SOAP包装使用的域名空间前缀和正文元素从soap (由 Net代理生成)改为SOAP ENV 因为我看见在SOAP错误信息中返回了SOAP ENV前缀 (见代码 )这表面上看上去微不足道的改变竟解决了问题!当处理任何请求的时候 PHP服务显然需要SOAP ENV前缀 而拒绝不包含SOAP ENV前缀的要求

  创建一个自定义代理

  既然已经了解了为什么Web服务返回一个SOAP错误 我们就可以创建一个自定义代理来生成网服务期待的SOAP包装 虽然创建一个自定义SOAP包装肯定比使用一个由或者WSDL exe公用程序生成的SOAP包装要花更多的时间 但是这样做可以完全控制包装的内容 为了开始创建自定义代理 我创建一个名为msnewsserviceproxy的包含两个字段的新类

  

  public class MSNewsServiceProxy string _uri; string _soapAction;

  uri字段保存了Web服务的位置 而_soapAction字段保存了将要使用SOAP包装发送的SOAPAction数据头的名称 在MSNewsServiceProxy类之内 添加CreateSoapEnvelope () SendSoapEnvelope ()和FilterResult ()这三个方法 这些方法生成SOAP包装请求 把它发送到Web服务 然后过滤返回的SOAP包装 让我们逐一的看看每个方法 注意代码在SOAP包装的根元素上添加一个SOAP ENV域名空间前缀 Web服务显然需要这个特定的前缀 而拒绝任何不包含这个前缀的信息 因为生成的代理发送一个soap域名空间前缀(而不是SOAP ENV) 所以它的消息被拒绝 Web服务不应该需要一个特定的域名空间前缀而为此拒绝不带此前缀的消息 但是域名空间问题也是你必须注意要想使工作更好的完成 要执行一些看上去不 >可思议的事情

  在SOAP包装被创建之后 SendSoapEnvelope ()方法(见代码段 )使用了几个System Net和System IO域名空间中的类来把这个包装发送到Web服务中 代码首先通过把_uri变量传送到对象构造器来创建一个HttpWebRequest对象 其次 与这个请求相关联的相应的Method ContentType和Header都将被发送

  然后一个StreamWriter对象和HttpWebRequest对象的请求流相关联 SOAP包装就被使用StreamWriter的Write ()方法写到流中

  从Web服务返回的SOAP包装被HttpWebResponse对象的SendSoapEnvelope ()方法获得

  HttpWebResponse response = (HttpWebResponse)request GetResponse();

  如果应答不是空值 它将被载入一个XMLTextReader XMLTextReader被用来填充XmlDocument对象 然后从这个方法中返回XmlDocument对象

  FilterSoapEnvelope ()方法分析SOAP应答包装并把从Web服务中返回的数据装入自定义代理的 消费者 使用的XmlDocument对象

  

  private XmlDocument FilterSoapEnvelope( XmlDocument doc) XmlDocument filterDoc =new XmlDocument(); XmlNode result = doc SelectSingleNode( //results ); XmlNode resultImport = filterDoc ImportNode(result true); filterDoc AppendChild(resultImport); return filterDoc;

  虽然过滤器可以使用好几种方法执行 但是FilterSoapEnvelope ()方法依靠XPath语句可以在应答SOAP包装中得到结果元素

cha138/Article/program/net/201311/12274

相关参考

知识大全 .Net整合其他平台的一些探讨[2]

.Net整合其他平台的一些探讨[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  创建一个自定

知识大全 把.Net整合进其他平台

把.Net整合进其他平台  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!整合分布式应用程序经常是一件

知识大全 .net程序中资源文件的保护办法探讨

在编程序(特别是WinForm时)经常会遇到一些需要加以保护的资源文件比如一些数据库文件图片文件等等我们希望能被自己的程序访问但是又不希望别人把我们辛辛苦苦收集来的数据被别人毫不费力地用于自己的程序中

知识大全 VC++.NET开发环境整合技巧

VC++.NET开发环境整合技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  主窗口内的每一个

知识大全 ASP.NET 中整合JavaScript的技巧

ASP.NET中整合JavaScript的技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  尽

知识大全 用Web Services来整合.NET和J2EE

用WebServices来整合.NET和J2EE  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 .NET跨平台的第一步

.NET跨平台的第一步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  NET跨平台的第一步   

知识大全 建立ASP.NET开发平台

建立ASP.NET开发平台  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  了解整个NET架构后接

知识大全 .NET平台2008年大事记

.NET平台2008年大事记  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Silverligh

知识大全 微软 .NET 在新的平台上编程

微软.NET在新的平台上编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文以及以后的系列文