ProtocolException Unhandled / (405) Метод не разрешен в WCF; Хотя привязки и конечные точки выглядят правильно

Я только учусь использовать WCF и пытаюсь написать небольшую программу HelloWorld с нуля (как на стороне хоста, так и на стороне клиента). Я получаюProtocolException Unhandled всякий раз, когда мой клиент пытается использовать сервис, и я не могу понять, почему. Я хостинг сервиса с использованием IIS.

Относительно того, как у меня все настроено: я делаю все возможное, чтобы разделить клиента, прокси, хост, сервис и контракт, как подробно описано в этомвидео и как указано в этомстатья, По сути, у меня есть разные проекты в рамках решения для каждого из них.

Вот несколько разных файлов, показывающих, о чем я говорю:

обслуживание
namespace HelloWorld
{
  public class HelloWorldService : IHelloWorldService
  {
    public String GetMessage(String name)
    {
        return "Hello World from " + name + "!";
    }
  }
}
контракт
namespace HelloWorld
{
  [ServiceContract]
  public interface IHelloWorldService
  {
      [OperationContract]
      String GetMessage(String name);
  }
}
полномочие
namespace HelloWorld
{
  public class Proxy : ClientBase<IHelloWorldService>, IHelloWorldService
  {
    #region IHelloWorldService Members

    public String GetMessage(String name)
    {
        return Channel.GetMessage(name);
    }

    #endregion

  }

}

клиент
namespace Client
{
  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click_1(object sender, EventArgs e)
    {
        Proxy proxy = new Proxy();
        MessageBox.Show(proxy.GetMessage(textBox1.Text));
    }
  }

}

Клиент - это просто форма с текстовым полем и кнопкой, и он пытается выполнить GetMessage (), используя все, что находится в текстовом поле, в качестве параметра. Есть еще один класс, который на самом деле создает экземпляр формы.

Вот мой web.config для сайта:

Web.config
<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior> 
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="HelloWorld.HelloWorldService" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="http://localhost:8002/" binding="basicHttpBinding" contract="HelloWorld.IHelloWorldService"/>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

И вот мой app.config, который идет с клиентом:

app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint address="http://localhost:8002/" binding="basicHttpBinding" contract="HelloWorld.IHelloWorldService" />
    </client>
  </system.serviceModel>

</configuration>

Мой SVC-файл очень короткий, просто:

HelloWorldService.svc
<%@ServiceHost Service="HelloWorld.HelloWorldService"%>

Я знаю, что служба работает, потому что, когда я перехожу кhttp://localhost:8002/HelloWorldService.svc в моем браузере я получаю экран с надписью

Вы создали сервис.

Чтобы протестировать этот сервис, вам нужно будет создать клиент и использовать его для вызова сервиса.

Итак, вот где загвоздка возникает: служба работает с использованием IIS, я запускаю экземпляр клиента, появляется окно с текстовым полем и кнопкой, я набираю несколько букв, нажимаю кнопку, а затем программа вылетает, и я получитьProtocolException Unhandled, (405) Method not allowed. Ошибка происходит в этой строке класса Proxy:

return Channel.GetMessage(name);

Я пытался понять это часами, и я не добился большого прогресса. Если бы кто-то мог хотя бы указать мне правильное направление, я был бы очень признателен.

И последнее: я хочу написать клиент и прокси с нуля, без использования svcutil.exe.

Ответы на вопрос(4)

Ваш ответ на вопрос