InvalidOperationException при использовании мыльного клиента - PullRequest
2 голосов
/ 23 марта 2010

Я добавил как файл wsdl с помощью диалогового окна добавления ссылки на обслуживание в vs2008.

MyService serviceproxy = new MyService();

Когда я создаю экземпляр прокси службы, я получаю исключение InvalidOperationException со следующим текстом (перевод с немецкого):

Не удалось найти конечную точку по умолчанию элемент договора "ServiceName.ServiceInterface" в модель обслуживания относится к клиенту раздел конфигурации. Это может быть потому что: конфигурация приложения файл не найден или не является конечной точкой в клиентском элементе найден элемент, который соответствовал этому договору.

Где servicename - это имя, которое я даю службе, когда добавляю ее в vs2008, а ServiceInterface - интерфейс, который автоматически создается для нее.

EDIT вот что в моем app.config:

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="MyServiceBinding" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
    </system.serviceModel>

Ответы [ 3 ]

2 голосов
/ 23 марта 2010

Вам нужно что-то подобное в вашей конфигурации:

<client>
  <endpoint binding="basicHttpBinding" 
    bindingConfiguration="MyServiceBinding" contract="ServiceName.ServiceInterface"
    name="MyServiceEndpoint">
  </endpoint>
</client>

внутри вашего тега

Я только что прочитал ваш комментарий.

Итак, удалил адрес из конфигурации конечной точки.

Вы можете указать конечную точку полностью в своем коде или просто как адрес:

MyServiceClient proxy = new MyServiceClient();
proxy.Endpoint.Address = new EndpointAddress ("http://addressto your service"); //<-- address
1 голос
/ 23 марта 2010

Edit: Извините, мой первый ответ был неверным. Для клиента вам необходимо:

ChannelFactory<Interface> factory = new ChannelFactory< YourServiceInterface >(new basicHttpBinding(), new EndpointAddress(new Uri("http://localhost:8888/YourService")));
YourServiceInterface proxy = factory.CreateChannel();
1 голос
/ 23 марта 2010

Проверьте файл конфигурации - web.config, если вы находитесь в веб-приложении ASP.NET или на веб-сайте, app.config, если это Winforms или консольное приложение.

Должна быть некоторая конфигурация дляваш сервис WCF там - все, что ниже <system.serviceModel> будет в порядке.Если нет - добавьте необходимую информацию в вашу конфигурацию!

ОК, поэтому, если вы хотите указать URL-адрес своей конечной точки в коде, вам нужно сделать это при создании экземпляра прокси-класса клиента - в противном случае, он пойдетпосмотри в конфиге.Используя этот фрагмент кода, вы будете использовать параметры конфигурации http-привязки из app.config и указывать URL-адрес отдельно в коде:

BasicHttpBinding binding = new BasicHttpBinding("MyServiceBinding");
EndpointAddress address = new EndpointAddress(new Uri("http://localhost:8888/YourService"));

MyService serviceproxy = new MyService(binding, address);

Таким образом, объект basicHttpBinding будет считывать параметры изконфиг под привязки с name=MyServiceBinding.

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