C# 如何获取web服务对象?

C# 如何获取web服务对象?,c#,web-services,C#,Web Services,我正在使用web服务用C实现一些代码,但我唯一的参考是他们用于负载测试的Java代码 Java通过调用 lotService=(LotService) ic.lookup("mes-webservices/lotService/remote"); 其中IC是一个InitialContext对象 我需要在C上做同样的调用,但我不知道如何做。有没有一种像这种java方法一样的简单方法可以在C中实现它?您可以在C中通过向web服务添加服务引用来实现类似的功能。我假设您的Web服务和消费客户端都在.N

我正在使用web服务用C实现一些代码,但我唯一的参考是他们用于负载测试的Java代码

Java通过调用

lotService=(LotService) ic.lookup("mes-webservices/lotService/remote");
其中IC是一个InitialContext对象


我需要在C上做同样的调用,但我不知道如何做。有没有一种像这种java方法一样的简单方法可以在C中实现它?

您可以在C中通过向web服务添加服务引用来实现类似的功能。我假设您的Web服务和消费客户端都在.NET中

Psuedo代码将是

LocationWebService objService = new LocationWebService(); // this is proxy class of web service created when you add web reference
string result = objService.GetLocationName(4); //call web method
以下是步骤:

在项目中添加服务引用 创建ServiceClient实例 通过使用上面创建的实例调用方法,它是公开的
就是这样。

首先右键单击项目并选择添加服务引用

一旦您有了它,您就需要创建服务客户机对象。无论您在上面将服务引用命名为什么,您的项目中都会有一个新的类型,我认为,服务引用名称后面附加了Client。示例:如果服务是FooService,那么将有一个名为FooServiceClient的客户端类型可用

要实例化,您需要一个绑定。您可以通过编程方式创建它:

var binding = new BasicHttpBinding()
            {
                CloseTimeout = new TimeSpan(0, 1, 0),
                OpenTimeout = new TimeSpan(0, 1, 0),
                ReceiveTimeout = new TimeSpan(0, 10, 0),
                SendTimeout = new TimeSpan(0, 1, 0),
                AllowCookies = false,
                BypassProxyOnLocal = false,
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxBufferSize = 65536,
                MaxBufferPoolSize = 524288,
                MaxReceivedMessageSize = 65536,
                MessageEncoding = WSMessageEncoding.Text,
                TextEncoding = Encoding.UTF8,
                TransferMode = TransferMode.Buffered,
                UseDefaultWebProxy = true
            };
            binding.ReaderQuotas.MaxDepth = 32;
            binding.ReaderQuotas.MaxStringContentLength = 8192;

if (isHttps)
    binding.Security = new BasicHttpSecurity() { Mode = BasicHttpSecurityMode.Transport };
然后需要一个端点。这样创建:

var endpoint = new EndpointAddress(serviceUri);
然后只需实例化服务客户端:

var serviceClient = new FooServiceClient(binding, endpoint);

您可以从服务客户端实例调用您的服务方法。

您在Google上查找过如何使用C来使用web服务吗?请按照此链接中的步骤进行操作。我查找了很多信息,但在这个特殊情况下没有任何帮助,因此我选择在这里询问,以期对我有所启发。我从来没有使用过Web服务,也许我缺乏使用Web服务的经验限制了我。我尝试过这样做,但当我尝试调用它的构造函数时,它不允许我使用,因为它是一个抽象类。我想这种方法只会得到一个构造的对象。为什么要向下投票,这不是在c中引用webservice的方法。如果是.asmx服务,请确保在服务类上有webservice属性,在尝试使用的方法上有WebMethod属性。为什么要向下投票?这是实例化服务客户机的有效方法。我已经做过很多次了。你如何设置BasicHttpBinding的所有属性。哪一个与默认值不同?为什么?这些是默认设置。您可以更改它们以自定义绑定。我使用助手类通过用传入的参数替换默认值来构造绑定。如果它们是默认值,为什么要显式分配它们。它给人的感觉是,你在玩这些参数时做了一些特别的事情。只需使用var binding=newbasichttpbinding;假设在将服务引用添加到项目中之后端点没有被更改,那么在我看来,您发布的所有代码都是多余的。