Веб-сервис с двумя интерфейсами вызывает ошибку в приложении WPF - PullRequest
4 голосов
/ 21 сентября 2011

У меня есть веб-сервис, который предоставляет два интерфейса.Один из них - «MyAppNameData», а другой - «MyAppNameSync».Я добавляю две сервисные ссылки в приложение WPF.В коде, когда я использую ссылку «MyAppNameData», я не получаю сообщение об ошибке.Когда я использую «MyAppNameSync», генерируется следующая ошибка:

Could not find default endpoint element that references contract 'MyAppNameSync.IMyAppNameSync' 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 contract could be found in the client element.

Я добавил две ссылки точно таким же образом, но MyAppNameData был добавлен с использованием BasicHttpBinding, а MyAppNameSync был добавлен с WSHttpBinding.Я не знаю, почему это так.

Вот элемент serviceModel из клиентского файла app.config.Как вы можете видеть, есть элемент конечной точки, который ссылается на контракт 'MyAppNameSync.IMyAppNameSync', в отличие от сообщения об ошибке:

    <system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IMyAppNameData" 
                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>
        <wsHttpBinding>
            <binding name="WSHttpBinding_IMyAppNameSync" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                bypassProxyOnLocal="false" transactionFlow="false" 
                hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                allowCookies="false">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                 maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00"
                    enabled="false" />
                <security mode="Message">
                    <transport clientCredentialType="Windows" 
                     proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="Windows" 
                    negotiateServiceCredential="true"
                        algorithmSuite="Default" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://computername.domainname.home/MyAppNameSyncService/MyAppNameData.svc"
            binding="basicHttpBinding" 
            bindingConfiguration="BasicHttpBinding_IMyAppNameData"
            contract="MyAppNameData.IMyAppNameData" 
            name="BasicHttpBinding_IMyAppNameData" />
        <endpoint address="http://computername.domainname.home/MyAppNameSyncService/MyAppNameSync.svc"
            binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyAppNameSync"
            contract="MyAppNameSync.IMyAppNameSync" 
            name="WSHttpBinding_IMyAppNameSync">
            <identity>
                <dns value="localhost" />
            </identity>
        </endpoint>
    </client>       
</system.serviceModel>

Любые рекомендации действительно будут оценены.

Спасибо

1 Ответ

2 голосов
/ 28 сентября 2011

OK.У меня это работает сейчас.У меня очевидно было несколько ошибок, происходящих одновременно.Как Рэйчел предложила в своем комментарии выше, я пытался заставить работать простейшее дело.Но изначально не смог.Удаление одной из служб с хоста, поэтому у меня был только MyAppNameData.svc, изначально не работало.Я знал, что простая версия веб-сервиса работала в прошлом, поэтому я пытался вернуть все к этому рабочему моменту.

Я использовал одно из своих существующих веб-приложений ASP.NET, чтобы указать на экземпляр веб-службы, который я использовал для тестирования, и я смог заставить его работать (даже имея два сервиса;MyAppNameData.svc и MyAppNameSync.svc в хосте MyAppNameWebService).Итак, я знал, что проблема была между моим приложением WPF и веб-сервисом.

Я видел несколько обсуждений, в которых говорилось: «Эта ошибка может возникнуть, если вы вызываете службу в библиотеке классов и вызываете библиотеку классов из другого проекта».Но я думал, что я учел эту проблему в своих шагах по решению проблем.Но когда я удалил все из своего проекта WPF и перестроил все это (в сотый раз), убедившись, что «включил параметры конфигурации WS в основные проекты app.config, если это winapp или web.config, если этовеб-приложение ", как указано в этой теме , я смог заставить его работать!

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

Спасибо всем за ваши ответы и предложения.Теперь о других задачах!

...