从客户端访问WCF服务时出错

时间:2015-07-11 13:07:26

标签: c# asp.net web-services wcf proxy-classes

我创建了一个简单的WCF服务,它添加了两个整数。服务主机完美启动。但在客户端,我在Reference.cs

中收到以下编译错误
  

类型中不存在类型名称“ServiceReference1”   'WcfServiceClient.ServiceReference1.WcfServiceClient'

客户端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WcfServiceClient
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            ServiceReference1.WcfServiceClient client = new ServiceReference1.WcfServiceClient("BasicHttpBinding_IWcfService");
            int result = client.Add(Convert.ToInt32(TextBox1.Text), Convert.ToInt32(TextBox2.Text));
            Label1.Text = result.ToString();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的错误中有一个提示:

  

类型中不存在类型名称'ServiceReference1'   'WcfServiceClient.ServiceReference1.WcfServiceClient'

请注意,生成的类名WcfServiceClient与命名空间的第一个组件的名称相同:

WcfServiceClient.ServiceReference1.WcfServiceClient
^^^^^^^^^^^^^^^^                   ^^^^^^^^^^^^^^^^
 1st component                       generated
 of namespace                        class name

这导致无法解析WcfServiceClient类。 (在.NET中,通常建议确保类名与命名空间组件的名称不同。)

请注意,您没有专门为自动生成的代理类提供名称;该名称由Visual Studio为您创建。我相信Visual Studio创建的代理类的名称是从它实现的契约接口派生的。具体来说,代理类的名称似乎是由:

创建的
  1. 从合约界面的名称中删除前导I
  2. 附加Client
  3. 根据您发布的代码,您的合约界面显示为IWcfService。因此,Visual Studio为其生成的代理类创建名称WcfServiceClient

    解决方法:为避免Reference.cs中的编译错误,请在客户端代码中将命名空间命名为WcfServiceClient以外的其他内容。