locked
web service HelloWorldRequest RRS feed

  • 问题

  • 我在本机中有个http://localhost/Service1.asmx服务,其中代码如下
    C# code
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Xml.Linq;

    namespace WebService1
    {
      /// <summary>
      /// Service1 的摘要说明
      /// </summary>
      [WebService(Namespace = "http://tempuri.org/")]
      [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
      [ToolboxItem(false)]
      // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
      // [System.Web.Script.Services.ScriptService]
      public class Service1 : System.Web.Services.WebService
      {

      [WebMethod]
      public string HelloWorld()
      {
      return "Hello World";
      }
      }
    }



    我在另外一个网站添加服务引用,命名为name1.
    随后我在cs文件中输入name1,提示却变成了
    HelloWorldRequest
    HelloWorldRequestBody
    HelloWorldResponse
    HelloWorldResponseBody

    WebServiceSoap
    WebServiceSoapChannel
    WebServiceSoapClient


    而我引用别人的web service时,却不会有这几个:
    HelloWorldRequest
    HelloWorldRequestBody
    HelloWorldResponse
    HelloWorldResponseBody
    只有:
    WebServiceSoap
    WebServiceSoapChannel
    WebServiceSoapClient

    ,不知道是如何设置的。

    经过我的测试发现如果把
      [WebMethod]
      public string HelloWorld()
      {
      return "Hello World";
      }
    改成:
      [WebMethod]
      public bool HelloWorld()
      {
      return true;
      }
    也就是改个类型就没有上面的情况了,不知道什么原因
    2010年8月3日 10:07

答案

  • HelloWorldRequest
    HelloWorldRequestBody
    HelloWorldResponse
    HelloWorldResponseBody

    不论这些客户端的类型是如何定义的,

    Web服务的客户端 本质上都是在构建一个SOAP消息,带Body的类型应该属于SOAP 消息体里的数据。HelloWorldRequest我猜测应该是整个消息,会引用HelloWorldRequestBody。

    不管返回的类型是基本数据类型比如字符串、Int。还是你的自定义的可序列化的数据,这些数据都是放在SOAP消息体里的。

    你可以在尝试定义一个可序列化的类型,比如

    [Serializable]

    class User

    {

    public string userName;

    public int age;

    }

     

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    2010年8月9日 14:22

全部回复

  • 不是很清楚,我就没有此类问题。那么你把引用的NameSpace名字改成别的:比如WebServiceDemo试试看。
    2010年8月4日 2:24
  • 我就是用这个名字,还是一样,不管用哪个名字都一样,如果您能写个Demo,我将十分感谢。因为网上也找不到相关例子,邮箱: yongfa365 qq.com
    2010年8月5日 2:00
  • HelloWorldRequest
    HelloWorldRequestBody
    HelloWorldResponse
    HelloWorldResponseBody

    不论这些客户端的类型是如何定义的,

    Web服务的客户端 本质上都是在构建一个SOAP消息,带Body的类型应该属于SOAP 消息体里的数据。HelloWorldRequest我猜测应该是整个消息,会引用HelloWorldRequestBody。

    不管返回的类型是基本数据类型比如字符串、Int。还是你的自定义的可序列化的数据,这些数据都是放在SOAP消息体里的。

    你可以在尝试定义一个可序列化的类型,比如

    [Serializable]

    class User

    {

    public string userName;

    public int age;

    }

     

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    2010年8月9日 14:22