2011-05-05 55 views
2

我目前正在使用C#来理解SOAP协议,我在Google中找到了一些示例并了解了信封,标题,正文。使用SOAP访问数据库的最佳方式

我使用webservice进行身份验证,但我想知道在哪里可以实现一个类或方法来访问提供的用户名和密码的数据库,我的意思是,肥皂标题具有user =“john”pass =“odos223kiwi0X”服务器收到标题,现在用户提供访问数据库并检查密码。

如果一个正确的选项在soap类中创建一个自定义方法来做到这一点?

+2

我建议使用Windows Communication Foundation来抽象SOAP实现的基本细节,以便您可以专注于编写处理业务逻辑所需的代码 – 2011-05-05 13:28:53

+0

您不清楚您在此处使用的是什么技术。你自己实现了整个服务堆栈吗?或者你在使用asmx服务? – MattDavey 2011-05-05 13:45:43

+0

嗨MattDavey!我正在使用asmx服务。 – Dev9 2011-05-05 14:04:06

回答

2

,你可以创建一个类,就像下面:

using System.Diagnostics; 
using System.Xml.Serialization; 
using System; 
using System.Web.Services.Protocols; 
using System.Web.Services; 
using System.Net; 

[System.Web.Services.WebServiceBindingAttribute(
Name = "FunctionName", 
Namespace = "nameSpace")] 
public class ClassName: 
System.Web.Services.Protocols.SoapHttpClientProtocol 
{ 
    public ClassName(string uri) // Constractor 
    { 
     this.Url = uri; // the full path for your server we will make later on in the answer 
    } 

    [System.Web.Services.Protocols.SoapDocumentMethodAttribute(
    "nameSpace/ClassName", 
    RequestNamespace = "nameSpace", 
    ResponseNamespace = "nameSpace", 
    Use = System.Web.Services.Description.SoapBindingUse.Literal, 
    ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 

    public object[] FunctionName(string Parameter1) 
    { 
     object[] results = { }; 

     try 
     { 
      results = this.Invoke("FunctionName", new object[] { Parameter1}); 
      return ((object[])(results[0])); 
     } 
     catch (Exception error) 
     { 
      object[] webException = { -1, error.Message }; 
      return (webException); 
     } 
    } 
} 

现在我们创建的asmx服务:

创建一个Web服务和命名空间下补充一点:

[WebService(Namespace = "NameSpace")] //same namespace you wrote in the class 

然后添加你的函数和Object []作为返回值。

[WebMethod] 
public object[] FunctionName(string Parameter1) // function name and parameters should be the same in your class where you called the web service (case sensitive) 
{ 
    ... // your code 
} 

**你可以下载http://www.fiddler2.com/fiddler2/version.asp,将允许您查看和跟踪传出请求

,请给我回来,如果你需要任何进一步的信息。

+0

-1:为什么不在.NET 2.0中使用“添加服务引用”或“添加Web引用”? – 2013-09-11 22:34:41

+0

@JohnSaunders,我正在寻找调用服务的最简单方法。我尝试了“添加Web引用”(它不再适用于VS 2010)和“添加服务引用”。我也看了一下wsdl.exe和svcutil.exe。所有4种方法为我生成大量代码。我打电话的服务有634个方法,但我只需要一种方法。所以我只拿了Arrabi的答案,因为代码更易读(这实际上是由wsdl.exe生成的代码的一部分,减去了异步部分)。 – AaA 2015-01-22 08:40:01

+0

@BobSort:为什么Reference.cs中的代码量对您很重要?通常很重要的是您必须维护的代码的大小,而不是为您生成的代码的大小。 – 2015-01-22 13:51:59

相关问题