【问题标题】:Unable to Consume simple ASP.NET web service无法使用简单的 ASP.NET Web 服务
【发布时间】:2017-05-16 03:44:15
【问题描述】:

作为练习,我发布了一个(非常简单的)网络服务,

http://www.myshoptour.com/WebServices/HelloWorldMST.asmx

测试页运行良好,但在我的网站上使用它时遇到问题。我的代码如下:

Try
    Dim wsProd As New wsHelloWorldMSTprod.HelloWorldMSTSoapClient()
    wsProd.Open()
    Select Case rblSelectHelloWorldType.SelectedIndex
        Case 0
            strOut = wsProd.HelloWorld1()
        Case 1
            strOut = wsProd.HelloWorld2()
        Case Else
    End Select
    wsProd.Close()
Catch ex As Exception
End Try

带有“新”的行似乎是问题所在。它什么也不做。好像回不去了。我无法追查到它。

谁能告诉我我做错了什么(并告诉我正确的代码)?

提前致谢。抱歉,如果这是错误的类别 - 我已经有一段时间没有在这里发布了。经过一段急需的休息后,我将重新开始 Web 开发!

编辑:

woodykiddy...非常感谢!我让它工作。唯一显着的区别:

原来: 将 wsProd 调暗为新的 wsHelloWorldMSTprod.HelloWorldMSTSoapClient()

修复: 将 wsProd 调暗为新的 wsHelloWorldMSTprod.HelloWorldMSTSoapClient("HelloWorldMSTSo‌​ap")

再次感谢!

【问题讨论】:

  • 当您尝试运行此代码时,您是否遇到某种错误,或者它只是不起作用?你怎么知道New 的行什么都不做?
  • 当我跟踪时,无论是踏入还是跨过新线,它什么都不做/不起作用。没有跟踪也一样,没有来自网络服务的响应。
  • 这太令人沮丧了,因为它是最简单的网络服务。正如我所说,我这样做是为了锻炼。

标签: asp.net vb.net web-services


【解决方案1】:

这就是我在我的应用程序中使用您的 Web 服务的方式。我希望您会发现此示例对您有所帮助。

我遵循的步骤

  1. 右键我的VS项目添加服务参考
  2. 在服务参考设置中,将“http://www.myshoptour.com/WebServices/HelloWorldMST.asmx”添加到地址字段
  3. 单击 Go/Discover,Visual Studio 应开始将服务信息拉入您的项目并配置设置,如服务端点等。完成后,您可以在应用程序代码中调用服务方法。此外,如果之前没有创建一个新文件夹 Service References,VS 将自动创建。
  4. 添加一个测试网页并在其上放置一个下拉列表控件和一个标签控件
  5. 在后面的代码中使用 Web 服务

测试页标记

<div>
Web Service Methods:
<asp:DropDownList runat="server" ID="DropDownList1" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
 <asp:ListItem Text="Please Select" Value=""></asp:ListItem>
 <asp:ListItem Text="HelloWorld1" Value="1"></asp:ListItem>
 <asp:ListItem Text="HelloWorld2" Value="2"></asp:ListItem>
 </asp:DropDownList>
</div>
<div>
    Web Service Response:
    <br />
    <asp:Label runat="server" ID="Label1" />
</div>

测试页面代码(C#)

protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = "N/A";
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    using (var svc = new HelloWorldMSTSoapClient("HelloWorldMSTSoap"))
    {
        if(DropDownList1.SelectedValue == "1")
         {
            Label1.Text = svc.HelloWorld1();
         }
         else if (DropDownList1.SelectedValue == "2")
         {
            Label1.Text = svc.HelloWorld2();
         }
         else
         {
            Label1.Text = "N/A";
         }
    }
}

Web.config(服务模型部分) - 您不需要手动添加它,因为它默认由 VS 处理。

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="HelloWorldMSTSoap" />
      </basicHttpBinding>
      <customBinding>
        <binding name="HelloWorldMSTSoap12">
          <textMessageEncoding messageVersion="Soap12" />
          <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="http://www.myshoptour.com/WebServices/HelloWorldMST.asmx"
        binding="basicHttpBinding" bindingConfiguration="HelloWorldMSTSoap"
        contract="HelloWorldMSTTest.HelloWorldMSTSoap" name="HelloWorldMSTSoap" />
      <endpoint address="http://www.myshoptour.com/WebServices/HelloWorldMST.asmx"
        binding="customBinding" bindingConfiguration="HelloWorldMSTSoap12"
        contract="HelloWorldMSTTest.HelloWorldMSTSoap" name="HelloWorldMSTSoap12" />
    </client>
  </system.serviceModel>

结果

HelloWorld1被选中时

HelloWorld2被选中时

注意 为方便起见,下面是VB版本的代码(由Telerik Code Converter转换)

Protected Sub Page_Load(sender As Object, e As EventArgs)
    Label1.Text = "N/A"
End Sub

Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs)
    Using svc = New HelloWorldMSTSoapClient("HelloWorldMSTSoap")
        If DropDownList1.SelectedValue = "1" Then
            Label1.Text = svc.HelloWorld1()
        ElseIf DropDownList1.SelectedValue = "2" Then
            Label1.Text = svc.HelloWorld2()
        Else
            Label1.Text = "N/A"
        End If
    End Using
End Sub

【讨论】:

  • woodykiddy...非常感谢!我让它工作。唯一显着的区别:
  • 最初:Dim wsProd As New wsHelloWorldMSTprod.HelloWorldMSTSoapClient() 您的建议,有效:Dim wsProd As New wsHelloWorldMSTprod.HelloWorldMSTSoapClient("HelloWorldMSTSoap")
  • @NancyK 是的,没错。您需要指定要使用的端点。默认情况下,VS 自动为同一个合约添加了两个端点,HelloWorldMSTTest.HelloWorldMSTSoap。无论如何,很高兴它有所帮助。如果您对答案感到满意,请标记它。
  • @NancyK 在计票下打勾?或者如果你暂时不能标记它,你也可以尝试投票。
  • 我做了勾号,但它不会让我投票,因为我是个新手!无论如何,再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多