относительный URL в привязке сервиса wcf - PullRequest
10 голосов
/ 17 декабря 2008

У меня есть элемент управления silverlight, который ссылается на службу wcf с поддержкой silverlight.

Когда я добавляю ссылку на службу в свой элемент управления silverlight, она добавляет следующее в мой файл clientconfig:

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_DataAccess" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:3097/MyApp/DataAccess.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DataAccess"
                contract="svcMyService.DataAccess" name="BasicHttpBinding_DataAccess" />
        </client>
    </system.serviceModel>
</configuration>

Как указать относительный URL-адрес в адресе конечной точки вместо абсолютного URL-адреса? Я хочу, чтобы он работал независимо от того, где я развернул веб-приложение, без необходимости редактировать файл clientconfig, поскольку компонент silverlight и веб-приложение всегда будут развертываться вместе. Я думал, что смогу указать только «DataAccess.svc», но, похоже, это не так.

Ответы [ 3 ]

14 голосов
/ 17 декабря 2008

Мое решение:

Вместо того чтобы использовать конструктор devault (который использует файл ServiceReferences.ClientConfig) для создания экземпляра моего прокси-класса, я использую следующее:

svcMyService.DataAccessClient svcProxy_m;

System.ServiceModel.BasicHttpBinding binding = new System.ServiceModel.BasicHttpBinding();

/*
Create an end point, build a an absolute uri reference by specifing the host address and a relative referece to the service page.
Application.Current.Host.Source will be something like Http://server/app/ClientBin/SilverlightApp.xap"<br/><br/>
Specifying Uri(Application.Current.Host.Source, "../DataAccess.svc")); will return "Http://server/app/DataAccess.svc"
*/

System.ServiceModel.EndpointAddress address = new System.ServiceModel.EndpointAddress(new Uri(Application.Current.Host.Source, "../DataAccess.svc"));

svcProxy_m = new svcMyService.DataAccessClient(binding, address);
4 голосов
/ 17 декабря 2008

Нельзя использовать относительные URI в конфигурации конечной точки клиента. Что вы можете сделать, это просто добавить еще один конструктор в ваш прокси-класс, который будет принимать какой-то параметр URL, который вы, возможно, можете получить из другого значения конфигурации или использовать один из методов класса Dns.

1 голос
/ 28 ноября 2011

Я использовал относительный URI в конфигурации, и мое приложение SL4 работает.

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_ICorrectionService" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647" textEncoding="utf-8" transferMode="Buffered">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>        
        <client>
            <endpoint address="/CorrectionService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICorrectionService"
            contract="CorrectionService.ICorrectionService" name="BasicHttpBinding_ICorrectionService" />
        </client>        
    </system.serviceModel>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...