C# 使用SOAP访问数据库的最佳方法

C# 使用SOAP访问数据库的最佳方法,c#,web-services,architecture,soap,C#,Web Services,Architecture,Soap,我目前正在用C#理解SOAP协议,我在Google中找到了一些例子,并理解了信封、标题和正文 我通过webservice进行了身份验证,但我想知道在哪里可以实现一个类或方法来使用提供的用户和密码访问数据库,我的意思是,soap头有user=“john”pass=“odos223kiwi0X”服务器收到了头,现在使用提供的用户访问数据库并检查密码 如果选择正确的选项,请在soap类中创建一个自定义方法来执行此操作?您可以按如下方式创建一个类: using System.Diagnostics; u

我目前正在用C#理解SOAP协议,我在Google中找到了一些例子,并理解了信封、标题和正文

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


如果选择正确的选项,请在soap类中创建一个自定义方法来执行此操作?

您可以按如下方式创建一个类:

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
然后添加函数和对象[]作为返回值

[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
}
**您可以下载它,它将允许您查看和跟踪外出请求


如果你需要进一步的信息,请把我发回来。

我建议使用Windows通信基金会来抽象SOAP实现的细节细节,这样你就可以专注于编写你需要处理业务日志的代码,而不清楚你在这里使用的是什么技术。您是否自己实现了整个服务堆栈?或者你在使用asmx服务?嗨,MattDavey!我使用的是asmx服务。-1:为什么不使用“添加服务引用”或“添加Web引用”(如果卡在.NET 2.0上)?@JohnSaunders,我也在寻找调用服务的最简单方法。我尝试了
添加Web参考
(在VS2010中不再有效)和
添加服务参考
。我还研究了wsdl.exe和svcutil.exe。所有4种方法都为我生成了大量代码。我调用的服务有634个方法,但我只需要一个方法。所以我接受了Arrabi的答案,因为代码更具可读性(实际上是wsdl.exe生成的代码减去异步部分的一部分)。@BobSort:Reference.cs中的代码量为什么对您很重要?通常重要的是您必须维护的代码的大小,而不是为您生成的代码的大小。这在为内存较小的机器生成代码时并不常见。另一方面,10年前我们认为
添加Web参考
是最好的,但现在已经过时了。10年后,我宁愿向程序员解释12行代码,也不愿解释640Kb的源文件是如何创建的,他们再也不能创建这样的文件了。是的,我们不仅有从2005年开始运行的程序,还有在1990年编写的程序。因此,请检查这个问题,了解为什么您需要理解这些代码