VS2005 中的 WCF 客户端

WCF Client in VS2005

我正在尝试在 VS2005 项目中实现 WCF 客户端。在 VS2010 中一切正常,因为我可以添加服务引用。对于 VS2005,我使用 svcutil 构建了 .config 和 Service1.cs。这两个文件已添加到项目中,我还添加了服务引用作为 Web 引用。 此外,您会发现生成了两个文件。

  <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="SDTRfServerClass.WCFService.WSHttpBinding_IService1" />
            </wsHttpBinding>
        </bindings>
        <client>
        <endpoint address="http://192.168.0.102:8732/Design_Time_Addresses/Calc/Service1/"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
          contract="SDTRfServerClass.WCFService.IService1" name="WSHttpBinding_IService1">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>

这是 app.config,我也尝试将其更改为 web.config,但这没有任何区别。

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "IService1")]
public interface IService1
{

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IService1/Add", ReplyAction = "http://tempuri.org/IService1/AddResponse")]
    double Add(double n1, double n2);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IService1/Substract", ReplyAction = "http://tempuri.org/IService1/SubstractResponse")]
    double Substract(double n1, double n2);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IService1/Multiply", ReplyAction = "http://tempuri.org/IService1/MultiplyResponse")]
    double Multiply(double n1, double n2);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IService1/Divide", ReplyAction = "http://tempuri.org/IService1/DivideResponse")]
    double Divide(double n1, double n2);
}

这是Service1.cs的一部分。 当我尝试使用以下代码调用服务时,出现错误“无法在 ServiceMode-client 的配置部分找到名称为 WSHttpBinding_IService1 和合同 IService1 的端点元素。如果配置未找到该应用程序或已找到一个使名称相等的端点。 我试图在所有地方用完整的解决方案名称更改名称。 有没有人作为解决方案?

client = new Service1Client("WSHttpBinding_IService1");
double result = client.Add(Double.Parse("2"), Double.Parse("4"));

我也尝试过使用 VS2005 的插件来添加创建 .map 和 .cs 文件的服务引用,但我总是遇到同样的错误。

我认为您有一些拼写错误或命名空间错误,因为错误意味着 .NET 无法找到有关您的端点的信息。

尝试 post 你的完整 web.config 我已经看过了

或者您可以像这样使用动态频道工厂,不用担心链接到您的 web.config

WSHttpBinding myBinding = new WSHttpBinding();

//define endpoint url (where service is deployed)
EndpointAddress myEndpoint = new EndpointAddress("http://192.168.0.102:8732/Design_Time_Addresses/Calc/Service1/"); //change to real endpoint 

//Use channel factory instead of generated one
ChannelFactory<IService1> myChannelFactory = new ChannelFactory<IService1>(myBinding, myEndpoint); //Change to you WCF interface
IService1 myServiceClient = myChannelFactory.CreateChannel();

//and call it            
var result = myServiceClient.Add(1,1); //input to your method
//other methods

((IClientChannel)myServiceClient).Close();
myChannelFactory.Close();