генерируется странный клиентский файл WCF app.config - PullRequest
0 голосов
/ 07 августа 2009

Я ссылаюсь на VSTS2008 (консольное приложение C #, использующее .Net 3.5), используя функцию «Добавить ссылку на службу», чтобы добавить ссылку на службу WCF, размещенную в IIS 7.0, на другой машине в той же локальной сети. Я считаю, что app.config на стороне клиента, сгенерированный автоматически, очень странный. Вот содержание,

Моя путаница в том, что адрес конечной точки - "http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo",, но на самом деле это должно быть" http://labtest1/WcfDemo/service.svc" (я могу использовать http://labtest1/WcfDemo/service.svc в IE, чтобы получить WSDL от хост-машины WCF labtest1). Но я не могу получить WSDL из IE, используя адрес "http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo".. Машина labtest1 имеет внутренний IP-адрес 10.10.200.10. Есть идеи, что не так?

Кстати: но клиентские функции работают, то есть вызов методов конечной точки WCF может вернуть ожидаемые результаты. Как «неправильный» адрес конечной точки может вернуть правильные результаты?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IOrderManagement" 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>
        <client>
            <endpoint address="http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IOrderManagement"
                contract="ServiceReference1.IOrderManagement" name="BasicHttpBinding_IOrderManagement" />
        </client>
    </system.serviceModel>
</configuration>

РЕДАКТИРОВАТЬ 1:

Это файл конфигурации (web.config), который я использую на стороне IIS 7.0. Я поместил service.svc в подкаталог WcfDemo веб-сайта по умолчанию на машине labtest1 (порт 80). Я думаю, что правильный адрес конечной точки должен быть "http://labtest1/WcfDemo/service.svc" отличным от" http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo"?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="Foo.ServiceBehavior"
        name="Foo.OrderManagement">
        <endpoint address="" binding="basicHttpBinding" contract="Foo.IOrderManagement" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Foo.ServiceBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Ответы [ 2 ]

1 голос
/ 07 августа 2009

Я видел, как это происходило, когда служба WCF размещена на сервере внутри домена. Похоже, что утилита создает URL-адрес интрасети вместо интернет-адреса.

1 голос
/ 07 августа 2009

Вы должны держать два URL отдельно:

  • тот, который вы используете для получения WSDL из
  • тот, который вы используете для фактического вызова службы на

Они могут быть разными! То, что вы можете получить WSDL из http://labtest1/WcfDemo/service.svc, не означает, что служба будет вызываться там.

Но я согласен - файл конфигурации выглядит довольно странно ... но опять же, функция "Добавить ссылку на службу" не известна для создания великолепных конфигов ....

Мое предложение: попробуйте подключиться к вашему сервису с помощью WcfTestClient.exe (который вы найдете в каталоге «программные файлы \ Microsoft Visual Studio 9.0 \ Common7 \ IDE») и посмотрите, что из этого получится.

alt text

Чтобы открыть службу, вам необходимо ввести адрес, по которому вы можете найти WSDL по адресу - т.е. http://labtest1/WcfDemo/service.svc в вашем случае. Какие конечные точки находит этот тестовый клиент ??

Марк

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