• 我的第一个web service程序(原创)


    程序功能:为联想渠道备件管理系统(SDM)提供上传和查看SLA附件,SDM系统服务器在一台机器上,要求附件保存在另一个文件系统服务器上.
    程序运行背景:
    本机(10.99.58.101)的默认网站(即localhost)主目录:D:\项目\SDM\01 工程\03 编码\SPMBJ\SPM
    web service所在主机(10.99.58.108)(10.99.29.162)的默认网站(即localhost)主目录:C:\Inetpub\wwwroot
    我所创建的web service程序文件夹命名(别名)为SpmSLAWebSevice

    Code

    webservice运行成功后,显示在浏览器中的网址为:http://localhost/SpmSLAWebSevice/SpmSlaFile.asmx
    遇到的问题:
    一.web service创建程序和调用程序均在本机
    1.服务器未能识别 HTTP 标头 SOAPAction 的值:http://localhost/SpmSLAWebSevice/UploadFile
    错误源:WebSevice的属性Namespace从[WebService(Namespace=http://localhost/SpmSLAWebSevice/)]修改为[WebService(Namespace=http://10.99.58.101/SpmSLAWebSevice/)]
    解决办法:增加[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]

    二.web service创建程序在远程服务器上,调用程序在本机
    1.
    对“c:\inetpub\wwwroot\SpmSLAWebSevice\”的访问被拒绝。未能开始监视文件更改
    解决办法: 在10.99.58.108的c:\inetpub\wwwroot\目录下的SpmSLAWebSevice文件夹上点右键-> 共享和安全->添加 ->ASPNET( 作为用户名)
    2.请求因 HTTP 状态 401 失败:Access Denied
    解决办法:远程调用时将10.99.58.108上默认网站下的SpmSLAWebSevice站点属性配置“允许匿名访问”勾上
    3.请求因 HTTP 状态 401 失败:Unauthorized
    解决办法:在调用程序中  
      WebReference.SpmSLA o;
         o = new SPM.WebReference.SpmSLA();
         o.Credentials=System.Net.CredentialCache.DefaultCredentials; //用于身份验证
    4.对路径c:\inetpub\wwwroot\SpmSLAWebSevice\EW00212220-2008115162728-2.jpg的访问被拒绝
    解决办法:将10.99.58.108上SpmSLAWebSevice文件夹安全属性新添加的ASPNET用户权限配置的"修改"勾上.
    三.web service在服务器(10.99.29.162)上,调用程序在本机(10.99.58.101),两服务器不在一个网段
    1.
    System.Web.Services.Protocols.SoapException: 无法识别请求元素
    错误源:动态引用WebReference。将WebReference的属性中URL行为由默认值"静态"修改成"动态"后,程序自动在web.config文件中添加:
    <add key="SPM.WebReference.SpmSLA" value="http://10.99.29.162/SpmSLAWebSevice/SpmSlaFile.asmx"/></appSettings>
    起初我以为这是自己何时手动加的,我把SPM.WebReference.SpmSLA修改成了SPM.WebReference.SpmSLAWebSevice,后来发现这是错的,那条语句是程序自己写上的,SpmSLA是我写的webservice程序中所建类的类名.
    动态引用的目的是方便当webservice布置到网络中任意一个位置,客户端不用修改程序并重新加载和编译,而只需修改客户端程序的web.config文件中的相应配置.
    我起初实现动态引用的办法:将webservice程序布置到不同位置时都让开发人员将该程序打开,如修改[WebService(Namespace=http://10.99.58.101/SpmSLAWebSevice/)]
    为[WebService(Namespace="http://10.99.29.162/SpmSLAWebSevice/")],然后我再修改客户端调用程序的config文件.导致报上述错误.(起先并不知道是这里导致上述错误,查错查了很长时间,不知道问题出在哪)

    解决办法:(懒得写了,就直接引述我作为客户端对web服务所在机器人员的飞鸽传书内容吧)
    >>你什么也不修改,不修改命名空间的IP, 也不重新编译SPM程序,我来再访问一下放在你机器上的这个服务。
    动态时不行的问题有可能是因为我俩的service命名空间不同导致成了两个不同的服务。
    ”(我作为客户端对web服务所在机器开发人员说)
    >>就是不能修改[WebService(Namespace="http://10.99.58.102/SpmSLAWebSevice/",
    >>这个IP只是为了唯一标识这个服务的,看来并不代表本机的IP。
    >>所以之前我发给你之后,都让你修改了IP,这样我再修改config文件时,访问你的服务就变成另一个不同的服务了。
    >那不太可能吧,如果两个局域网内存在两个同样的,不混了吗,只有通过url唯一标识才行吧
    是的,我见网上有人提了这个问题,说运行报异常提示服务有重名。但是同一个服务应该只有有一个名字吧,无论它放在哪里他的命名应该是不变的吧,要变只是变的他的物理地址。我是这么理解的。
    >我觉得那个命名只要是唯一就行了,不一定是写成IP形式,网上一些例子都用的网站名字。
    >如果每次换机器,都要打开程序再命名那就麻烦了。
    人家的网站名字是唯一的url,其实就相当于公网ip访问.如:www.sohu.com

    >是的,所以我想,可能我把现在的程序中[WebService(Namespace="http://10.99.58.102/SpmSLAWebSevice/",
    >10.99.58.102这个地方变成一个英语名,只要不重复应该也行得通。

    刚刚我上传了两个SLA,一个是传到我的本机上了,修改了配置,然后再传了一个到你的机器上
    >现在看来是,一个web服务,创建后运行时只要不提示重名就行了,然后把这个服务放在任何位置对webservice程序本身都不用再作任何修改和处理。
    >只需要在调用方的配置文件里修改webservice所在的机器物理地址












  • 相关阅读:
    记php多张图片合成一张图片 压缩固定分辨率 合并生成竖列 纵向长图(可用于商品详情图合并下载)
    记php-mysql分页查询出现重复数据
    记laravel order by 问题
    记登录注册时候 前端js明文密码 加密传输 php解密
    记下载oss图片接口(附带删除)
    记tp5.1使用composer PhpOffice的xlsx表格文件导入数据库
    记php移动并压缩多级目录文件为zip文件并上传oss
    Jmeter服务器性能监控工具插件之ServerAgent
    Jmeter阶梯式加压测试
    Jmeter 下载+安装+汉化+版本更新+备份使用(Jmeter 4+版本均适用)
  • 原文地址:https://www.cnblogs.com/luowei/p/1040224.html
Copyright © 2020-2023  润新知