以.NET WCF服务为例,如何以编程方式创建端点

8
我有一个类,旨在与Web服务一起使用。目前,我已经编写了它来查询http://www.nanonull.com/TimeService/TimeService.asmx
该类将被一个使用VBScript的旧应用程序使用,因此将使用Namespace.ClassName约定进行实例化。
我在编写代码以使绑定和端点与我的类一起工作时遇到了问题,因为我无法使用配置文件。我看到的示例讨论使用SvcUtil.exe,但如果Web服务是外部的,我不清楚如何操作。
有人能指点我吗?这是我目前的情况,编译器在IMyService上崩溃:
 var binding = new System.ServiceModel.BasicHttpBinding();
        var endpoint = new EndpointAddress("http://www.nanonull.com/TimeService/TimeService.asmx");

        var factory = new ChannelFactory<IMyService>(binding, endpoint);

        var channel = factory.CreateChannel(); 


        HelloWorld = channel.getCityTime("London");

1
查看此线程:https://dev59.com/GHVD5IYBdhLWcg3wNIvc - doblak
“编译器崩溃”是什么意思?出现了什么错误? - Igby Largeman
这是一个愚蠢的问题,但这是一个 ASMX 服务,而不是 WCF 服务,对吧? - Jeremy
Darjan - 我尝试过了,但我不清楚要使用哪种类型,这就带我来到:Charles - 当尝试解析ChannelFactory构造函数中的Type时,它会出现错误。在Darjan的帖子中,对我来说也不清楚应该放什么参数。Jeremy - 我正在尝试调用一个ASMX服务。感谢您的参与。我觉得我离成功很近,但却缺少一些愚蠢的东西。 - E. Rodriguez
1个回答

9

Darjan是正确的。使用Web服务提供的解决方案有效。使用svcutil生成代理的命令行如下:

svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config http://www.nanonull.com/TimeService/TimeService.asmx

你可以忽略app.config,但是需要将生成的generatedProxy.cs添加到你的解决方案中。接下来,你应该使用TimeServiceSoapClient,看一下:

using System;
using System.ServiceModel;

namespace ConsoleApplication
{
  class Program
  {
    static void Main(string[] args)
    {
      TimeServiceSoapClient client = 
        new TimeServiceSoapClient(
          new BasicHttpBinding(), 
          new EndpointAddress("http://www.nanonull.com/TimeService/TimeService.asmx"));

      Console.WriteLine(client.getCityTime("London"));
    }
  }
}

基本上就是这样!

谢谢。你的代码比我用Darjan的链接拼凑出来的更简洁。 - E. Rodriguez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接