Разработка Silverlight - URL службы при локальной разработке - PullRequest
1 голос
/ 19 февраля 2009

Каков правильный шаблон или метод для разработки приложения Silverlight (который представляет собой проект Silverlight и веб-приложение в одном решении)? Я имею в виду, как добавить ссылку на службу, если номер порта localhost будет постоянно меняться?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 21 октября 2009

Как этот: http://forums.silverlight.net/forums/t/19021.aspx

Не полагайтесь на URL-адрес, заданный в ServiceReference.ClientConfig. Установите свой URL в коде. Измените свой код вызова WebSerivice на следующий:

      var webService = new YourWebService.YourWebServiceClient() // This is the default constructor, url will be read from the clientconfig file.

      Uri address = new Uri(Application.Current.Host.Source, "../YourService.svc"); // this url will work both in dev and after deploy.

      var webService = new YourWebService.YourWebServiceClient("YourServiceEndPointName", address.AbsolutePath);
1 голос
/ 19 февраля 2009

Если вы выберете веб-проект в обозревателе решений, вы можете изменить свойство в окне инструмента Свойства, которое остановит изменение порта. Свойство называется «Использовать динамические порты» , и вы хотите установить для него значение false, чтобы порт оставался статическим.

Вы также можете указать номер порта в этих настройках.

Обратите внимание, что это не на страницах свойств проекта, а в окне инструмента Свойства (возможно, поэтому его так сложно найти - мне потребовалось довольно много времени, чтобы разобраться с этим самостоятельно).

Обновление

Чтобы переключаться между развертыванием и разработкой, я склонен указывать две привязки SOAP, а затем использовать #ifdef DEBUG для переключения привязки моего клиента SOAP в зависимости от типа сборки. Сборка DEBUG указывает на службы разработки, а сборка RELEASE указывает на развернутые службы.

Итак, мой ClientConfig выглядит примерно так:

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="Soap_Debug" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647">
          <security mode="None" />
        </binding>
        <binding name="Soap_Release" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647">
          <security mode="None" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://www.mymadeupurl.com/myservices.asmx"
        binding="basicHttpBinding" bindingConfiguration="Soap_Release"
        contract="MyServices.MyServicesSoap" name="Soap_Release" />
      <endpoint address="http://localhost:1929/mydservices.asmx"
        binding="basicHttpBinding" bindingConfiguration="Soap_Debug"
        contract="MyServices.MyServicesSoap" name="Soap_Debug" />
    </client>
  </system.serviceModel>
</configuration>

Я создаю экземпляры клиента SOAP следующим образом:

#if DEBUG
   // localhost hosts the web services in debug builds.
   soapClient = new MyServicesSoapClient("Soap_Debug");
#else
   // The web services are hosted in a different location for release builds.
   soapClient = new MyServicesSoapClient("Soap_Release");
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...