Предоставление обмена метаданными для использования с svcutil

Я пытаюсь взять очень простую (по существу пустую/бесфункциональную) службу, которая у меня есть, и создать прокси с помощью svcutil.exe. Вот мой сервер:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;

class Server2
{
    static void Main(string[] args)
    {
        Console.WriteLine("Server");

        Uri baseAddress = new Uri("http://localhost:1234");
        var host = new ServiceHost(typeof(TheContractService), baseAddress);
        //host.AddServiceEndpoint(typeof(TheContractService), new WSHttpBinding(), "ContractService");
        host.Open();

        Console.ReadLine();
    }
}

[ServiceContract]
class TheContractService
{
    [OperationContract]
    void Expose()
    {
        Console.WriteLine("Exposed");
    }
}

[DataContract]
class TheContract
{
    [DataMember]
    public string PublicProperty { get; set; }
    [DataMember]
    public string PublicField;
    [DataMember]
    private string PrivateProperty { get; set; }
    [DataMember]
    private string PrivateField;
    [DataMember (Name = "BetterName")]
    private string fudshjguhf;
}

Теперь мне просто нужно настроить мой файл .config, чтобы разрешить MEX — вот конфигурация моего сервера:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>    
    <services>
      <service name="ContractService"
               behaviorConfiguration="MexServiceBehavior">

        <endpoint address="ContractService"
                  binding="basicHttpBinding"
                  contract="TheContractService"
        />

        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange"
        />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="MexServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>                  
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Что я здесь делаю неправильно? Когда я пытаюсь запустить эту команду: svcutil /t:code http://localhost:1234/mex /out ContractService.cs /config: ContractService.config

Я получаю ошибки 400 или 405, и прокси-сервер клиента не создается успешно. Может ли кто-нибудь увидеть какие-либо проблемы с тем, что у меня сейчас есть? Спасибо!


person Chris V.    schedule 28.08.2012    source источник
comment
Просто любопытно, вы добавили этот URL-адрес в список доступа с помощью netsh? Команда будет выглядеть примерно так: netsh add urlacl url=http://+:1234/ user=DOMAIN\user с вашим доменом Windows и именем пользователя.   -  person Trevor Elliott    schedule 29.08.2012


Ответы (1)


Имя вашего класса — TheContractService, но в вашей конфигурации атрибут name элемента <service>ContractService. Убедитесь, что значением этого атрибута является полное имя (пространство имен, если оно есть, плюс имя класса), иначе конфигурация не будет принята.

person carlosfigueira    schedule 28.08.2012