WCF - ошибка конфигурации конечной точки клиента - PullRequest
3 голосов
/ 11 января 2012

В моем клиентском приложении я получаю следующую ошибку:

Could not find endpoint element with name 'QueuedService' and contract
'IMyService' in the ServiceModel client configuration section. This might
be because no configuration file was found for your application, or because no
endpoint element matching this name could be found in the client element.

Я использовал svutil.exe для создания клиентского прокси, который я использую.Обычно я вручную прокручиваю свой собственный прокси и замечаю, что сгенерированная версия интерфейса для контракта на обслуживание не была в пространстве имен, которое я изначально указал в контракте на обслуживание:

// Auto-generated proxy

namespace MyServices.Contracts
{
    // Request object in correct namespace

    [System.Runtime.Serialization.DataContractAttribute(
        Name="MyRequest",
        Namespace="http://schemas.datacontract.org/2004/07/MyServices.Contracts")]
    public class MyRequest
    {
        // ...
    }
}

// Service contract NOT in namespace

[System.ServiceModel.ServiceContractAttribute(
    ConfigurationName="IMyService")]
public interface IMyService
{
    // ...
}

Мое хост-приложение web.configуказывает конечные точки службы (одна для MSMQ и одна для TCP):

<system.serviceModel>
<service>

<!-- etc... -->    

<endpoint name="QueuedService"
          address="net.msmq://localhost/private/MyQueue"
          binding="netMsmqBinding"
          bindingConfiguration="MsmqDefaultBinding_Local"
          contract="MyService.Contracts.IMyService" />
<endpoint name="TcpService"
          address="net.tcp://localhost/ServiceHost/TheService.svc"
          contract="MyServices.Contracts.IMyService"
          binding="netTcpBinding"
          bindingConfiguration="netTcpWindowsBinding" />
</service>
</system.serviceModel>

Клиентское приложение использует службу следующим образом:

var endpointConfigName = GetEndpointConfigNameFromConfig();

using(var myServiceClient = new MyServiceClient(endpointConfigName))
{
    // Create Request object...

    // Call service like so:

    myServiceClient.SomeServiceMethod(requestObject);
}

И клиентский web.config:

<client>
    <endpoint name="QueuedService"
            address="net.msmq://localhost/private/MyQueue"
            binding="netMsmqBinding"
            bindingConfiguration="MsmqDefaultBinding_Local"
            contract="MyServices.Contracts.IMyService" />
    <endpoint name="TcpService"
            address="net.tcp://localhost/ServiceHost/TheService.svc"
            contract="MyServices.Contracts.IMyService"
            binding="netTcpBinding"
            bindingConfiguration="netTcpWindowsBinding" />
</client>

Есть идеи ???

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Похоже, что ConfigurationName в Сгенерированном прокси - это просто IMyService, а не MyServices.Contracts.IMyService. Таким образом, в ваших клиентах web.config вы можете просто заключить договор в качестве IMyService, а не полный и проверить, работает ли он.

1 голос
/ 11 января 2012

Это немного тривиально, но относится ли ваш app.config к процессу, в котором работает приложение?Например, если вы создали ссылку на службу в сборке / отдельном проекте, но вызываете ее из exe-файла, который ссылается на эту сборку, конфиг должен быть в файле app.config в exe клиента, а не в app.config для сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...