C# 带有ChannelFactory的WCF客户端,方法返回ProtocolException/405方法不允许

C# 带有ChannelFactory的WCF客户端,方法返回ProtocolException/405方法不允许,c#,.net,wcf,C#,.net,Wcf,我正在编写程序的一部分,用于客户端和服务器之间的通信 服务仅将查询转发到数据库。但当我尝试发送查询时,我得到一个异常“ProtocolException/(405)methodnotallowed” 我试着从他们那里得到答案,但没有任何帮助 以下是我的一些文件: 用于通信的客户端它是一个库,因为我们希望从Unity使用它,我也希望在测试中使用此代码 namespace Client { public class ClientCommunicationWcf : IDisposable

我正在编写程序的一部分,用于客户端和服务器之间的通信

服务仅将查询转发到数据库。但当我尝试发送查询时,我得到一个异常“ProtocolException/(405)methodnotallowed”

我试着从他们那里得到答案,但没有任何帮助

以下是我的一些文件:

用于通信的客户端它是一个库,因为我们希望从Unity使用它,我也希望在测试中使用此代码

namespace Client
{
    public class ClientCommunicationWcf : IDisposable
    {
        private readonly ChannelFactory<ITask> _taskFactory;


        public ClientCommunicationWcf()
        {
            _taskFactory = new ChannelFactory<ITask>("localhost");
        }

        public T GetResponse<T>(string commandName, object data)
        {
            var channel = _taskFactory.CreateChannel();
            channel.Execute(commandName, data);
            return (T)channel.ResponseObject;
        }

        public void Dispose()
        {
            _taskFactory.Close();
            ((IDisposable) _taskFactory).Dispose();
        }
    }
}
服务合同

namespace CommunicationCommonLib.Requests
{
    [DataContract]
    [KnownType(typeof(LoginUserRequest))]
    public class LoginUserRequest
    {
        [DataMember]
        private readonly string _username;
        [DataMember]
        private readonly string _password;


        public LoginUserRequest(string username, string password)
        {
            _username = username;
            _password = password;
        }


        public string Username
        {
            get { return _username; }
        }

        public string Password
        {
            get { return _password; }
        }
    }
}
namespace CommunicationCommonLib
{
    [ServiceContract]
    public interface ITask
    {
        object ResponseObject
        {
            [OperationContract]
            get;
        }

        /// <param name="data"></param>
        [OperationContract]
        void Execute(string commandName, object data);
    }
}
Web.config


“也在WcfService2-Properties-Web中设置,用于IIS Express。
我编写了WPF应用程序来测试客户机-服务器通信,其中存储了App.config。WPF仅用于发送请求和检查结果

Web.config可能是错误的,因为这是我的第一个WCF,我尝试了不同的例子

当我运行程序时,浏览器打开“”,所以我认为服务正在运行

谢谢你的帮助


编辑:ServerTaskService是IServerTask和ITask的子项。

您的服务合同名称是ITask,而您的服务类实现了一些不同的接口,即IServerTask。请更正服务类定义。

调试服务时,客户端调用是否达到了
Execute
-方法?以排除错误如果数据库部分出现问题,您可以添加一个简单的虚拟方法,以确保服务的简单调用正常工作。我尝试了该方法,但客户端无法到达服务器。我将所有设置为ITask,并得到相同的异常。
namespace WcfService2
{
    public class ServerTaskService : IServerTask, ITask
    {
        private object _responseObject;


        public object ResponseObject
        {
            get { return _responseObject; }
        }


        public void Execute(string commandName, object data)
        {
            DataCommands.RunCommand(commandName, data, this);
        }

        public void SetResponse(object response)
        {
            _responseObject = response;
        }
    }
}