Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 纯粹从aspx页面使用Web服务_C#_Asp.net_Html_Web Services - Fatal编程技术网

C# 纯粹从aspx页面使用Web服务

C# 纯粹从aspx页面使用Web服务,c#,asp.net,html,web-services,C#,Asp.net,Html,Web Services,我的公司在其中一台it服务器上托管了一个SOAP web服务,需要使用此web服务直接从我正在开发的web前端创建“任务”。我可以访问WSDL webservice文档说明我必须: 1。调用LoginSI,提供用于身份验证的用户名和密码, 因此,接收SessionId 2。对WebService执行任意数量的方法调用,传入SessionId 3。调用LogoutSI,传入SessionId。这将放弃之前的会话 通过LoginSI建立 这听起来很合理,我已设法调用LoginSI Web服务并使用以

我的公司在其中一台it服务器上托管了一个SOAP web服务,需要使用此web服务直接从我正在开发的web前端创建“任务”。我可以访问WSDL

webservice文档说明我必须:

1。调用LoginSI,提供用于身份验证的用户名和密码, 因此,接收SessionId

2。对WebService执行任意数量的方法调用,传入SessionId

3。调用LogoutSI,传入SessionId。这将放弃之前的会话 通过LoginSI建立

这听起来很合理,我已设法调用LoginSI Web服务并使用以下简单HTML表单检索SessionID:

<form action="http://webservice_server/webservice.asmx/LoginSI" method="post">
    <p>
        Username:<br />
        <input type="text" name="username"/>
    </p>
    <p>
        Password:<br />
        <input type="password" name="password"/>
    </p>

    <input type="submit" value="Test login"/>
</form>


用户名:

密码:

到目前为止还不错。下一步是开始执行其他Web服务。然而,我想要的是从同一个页面(最初)完成所有这一切。例如,一旦您成功登录,codebehind将处理webservice响应并获取您的会话ID。然后页面上会出现一些其他选项,随后对webservice的每次调用都将使用会话ID

我不知道如何纯粹从codebehind(或以任何其他方式实现所需行为)使用Web服务。我找到了一些文章,但它们大多提到了向项目添加程序集引用,我认为我无法做到这一点,因为我自己没有编写webservices


有人能告诉我正确的方向吗?

您可以通过该选项添加对
WSDL
文件的引用

这将生成一个可以在代码中使用的代理


有关详细信息,请参见MSDN上的此部分(您可能只需跳到
将Web服务作为组件添加即可)。

您有两个选项。您可以为需要调用的每个服务添加web引用,如果不可能,您可以考虑使用System.Net.WebClient类调用web服务

本文介绍了如何动态调用web服务:


我将从您提到的关于无法引用Web服务的项目程序集的最后一点开始回答。。。你不必这么做

为了为该web服务创建强类型代理,您只需从web应用程序中使用添加服务引用选项。代理(是一个常规的C#类)是一个soapclient,它将公开所有webservice方法,供您从aspx页面的代码后面访问

现在的挑战是持久化从Web服务返回给您的SessionId,因为您有各种选项、会话、ViewState、QueryString。。。所以你挑吧

当然,另一种可能性是webservice是以RESTful方式实现的,这意味着不存在允许创建强类型代理的wsdl文件。在这种情况下,您可以使用WebClient类手动创建代理和服务方法,例如:

WebClient proxy = new WebClient();
byte[] data = proxy.DownloadDataAsync("RESTful Method Uri");

希望这有帮助。

什么样的web服务?休息肥皂?有WSDL吗?@Oded是的,有WSDL。请原谅我的愚蠢,但我如何确定它是否是SOAP/REST?如果它有WSDL,它将是SOAP。