Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > доступ к wcf сервису


Автор: starostin 16.1.2011, 13:17
на одном компе запускаю свою службу и wcftestclient, всё катит нормально, но когда запускаю на другом компе wcftestclient, сервис не добавляется, ошибка странная пишет сначало что то про metadata а дальше что то на не русской кодировке, вот мой конфиг файл
Код

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding
                    closeTimeout="00:00:10"
                    openTimeout="00:00:20"
                    receiveTimeout="00:00:30"
                    sendTimeout="00:00:40"
                    bypassProxyOnLocal="false"
                    transactionFlow="false"
                    hostNameComparisonMode="WeakWildcard"
                    maxReceivedMessageSize="1000"
                    messageEncoding="Mtom"
                    proxyAddress="http://localhost:1407/Patrons"
                    textEncoding="utf-16"
                    useDefaultWebProxy="false">
          <reliableSession ordered="false"
               inactivityTimeout="00:02:00"
               enabled="true" />
          <security mode="None"/>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service name="HelloWorldService">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:1407/Patrons" />
          </baseAddresses>
        </host>
        <endpoint address ="" binding="wsHttpBinding" contract="IHelloWorldService">
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>


Автор: jonie 16.1.2011, 14:17
starostin, ну коли он что-то пишет, то попробуйте что-то сделать! Мы типа должны угадать что он конкретно пишет?!

Автор: starostin 16.1.2011, 14:55
А в конфиге правильно всё написано? Я хочу отключить аутонтефикацию какую либо
Вот сообщение wcftestclient с соседнего компа: " Error: Cannot obtain Metadata from http://192.168.0.1:1407/Patrons If this is a Windows ® Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.  For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error    URI: http://192.168.0.1:1407/Patrons    ЊҐв ¤ ­­лҐ ᮤҐа¦ в ­Ґа §аҐиЁ¬го ббл«Єг: "http://192.168.0.1:1407/Patrons".    <?xml version="1.0" encoding="utf-16"?><Fault xmlns="http://www.w3.org/2003/05/soap-envelope"><Code><Value>Sender</Value><Subcode><Value xmlns:a="http://schemas.xmlsoap.org/ws/2005/02/sc">a:BadContextToken</Value></Subcode></Code><Reason><Text xml:lang="ru-RU">ЌҐ г¤ «®бм ®Ўа Ў®в вм б®®ЎйҐ­ЁҐ. ‘Є®аҐҐ ўбҐЈ®, ЇаЁзЁ­  ў ⮬, зв® ¤Ґ©бвўЁҐ "http://schemas.xmlsoap.org/ws/2004/09/transfer/Get" пў«пҐвбп ­ҐЇа ўЁ«м­л¬ Ё«Ё б®®ЎйҐ­ЁҐ ᮤҐа¦Ёв ­Ґ¤®ЇгбвЁ¬л© Ё«Ё Їа®бва®зҐ­­л© ¬ аЄҐа Є®­вҐЄбв  ЎҐ§®Ї б­®бвЁ, «ЁЎ® Ё¬ҐҐв ¬Ґбв® ­Ґб®®вўҐвбвўЁҐ ¬Ґ¦¤г ЇаЁўп§Є ¬Ё. Њ аЄҐа Є®­вҐЄбв  ЎҐ§®Ї б­®бвЁ бв ­®ўЁвбп ­Ґ¤Ґ©б⢨⥫м­л¬, Є®Ј¤  Є ­ « ЇаҐаў ­ б«г¦Ў®© Ё§-§  ®вбгвбвўЁп  ЄвЁў­®бвЁ. —в®Ўл ЇаҐ¤®вўа вЁвм ЇаҐ¦¤ҐўаҐ¬Ґ­­®Ґ ЇаҐалў ­ЁҐ б«г¦Ў®© Їа®бв Ёў ойЁе ᥠ­б®ў, 㢥«Ёзм⥠⠩¬- гв Receive ў ЇаЁўп§ЄҐ Є®­Ґз­®© в®зЄЁ б«г¦Ўл.</Text></Reason></Fault>HTTP GET Error    URI: http://192.168.0.1:1407/Patrons    „®Єг¬Ґ­в б URL- ¤аҐб®¬ http://192.168.0.1:1407/Patrons ­Ґ а бЇ®§­ ­ Є Є ¤®Єг¬Ґ­в Ё§ўҐбв­®Ј® вЁЇ .‚ гбва ­Ґ­ЁЁ Їа®Ў«Ґ¬л ¬®Јгв Ї®¬®зм б®®ЎйҐ­Ёп ®Ў ®иЁЎЄ е ¤«п Є ¦¤®Ј® Ё§ўҐбв­®Ј® вЁЇ :- ЋвзҐв ®в "http://192.168.0.1:1407/Patrons": "”®а¬ в ¤®Єг¬Ґ­в  ­Ґ а бЇ®§­ ­ (вЁЇ ᮤҐа¦Ё¬®Ј®: "text/html; charset=UTF-8").".- ЋвзҐв ®в "„®Єг¬Ґ­в DISCO": "‚®§­ЁЄ«  ®иЁЎЄ  ЇаЁ § Јаг§ЄҐ "http://localhost:1407/Patrons?disco".".  - ЌҐў®§¬®¦­® ᮥ¤Ё­Ёвмбп б г¤ «Ґ­­л¬ бҐаўҐа®¬  - Џ®¤Є«о祭ЁҐ ­Ґ гбв ­®ў«Ґ­®, в.Є. Є®­Ґз­л© Є®¬ЇмовҐа ®вўҐаЈ § Їа®б ­  Ї®¤Є«о祭ЁҐ 127.0.0.1:1407- ЋвзҐв ®в "„®Єг¬Ґ­в WSDL": "”®а¬ в ¤®Єг¬Ґ­в  ­Ґ а бЇ®§­ ­ (вЁЇ ᮤҐа¦Ё¬®Ј®: "text/html; charset=UTF-8").".- ЋвзҐв ®в "‘奬  XML": "”®а¬ в ¤®Єг¬Ґ­в  ­Ґ а бЇ®§­ ­ (вЁЇ ᮤҐа¦Ё¬®Ј®: "text/html; charset=UTF-8").". "
Так легче? smile

Автор: jonie 16.1.2011, 18:14
starostin, а вас не смущает что у вас в конфиге фигурирует localhost как базовый адрес?

Автор: starostin 16.1.2011, 22:14
Это конфиг сервиса, неужели надопрописывать айпишник машины на которой запущен? просто везде где чё то пишут про конфиги используют только локалхост, на соседней машине я добавляю в тестовый клиент сервис http://192.168.0.1:1407/Patrons. Если это не правильно то я могу начать верить в бога и чудеса

Ещё забыл уточнить, правда не уверен, что это играет какую то роль, я сервис не размещал в iis на хосте запускаю

Автор: zektor 10.2.2011, 02:57
Такая же проблема. Подскажите кто может неделю уже бьюсь со службой. Локально работает, а по сети не получается.

Автор: jonie 10.2.2011, 10:14
Цитата(starostin @  16.1.2011,  22:14 Найти цитируемый пост)

Ещё забыл уточнить, правда не уверен, что это играет какую то роль, я сервис не размещал в iis на хосте запускаю

если вы пытаетесь запустить его из asp.net dev server то у вас ничего не получится - т.к. данный сервер работает (биндится) только на локалхост. И плевать он хотел (впрочем, как и IIS) на ваши baseAddress-ы.

Итак, для хостинга WCF существует три метода: IIS, WAS (windows activation service) и self-hosting.
Asp.net dev server по сути аналогичен урезаному IIS-у и кроме всего прочего биндится только на локалхост - т.е. его нельзя использовать (без бубна) для публикации сервиса в сети. Посему это не рассматриваем.

IIS
Хостинг в IIS с т.з. адресации сам говорит приложению какой порт и базовый адресс использовать (это вы задаете в настройках IIS). Посему он попросту плевать хотел на указание baseAddress-ов и самостоятельно вычисляет где сервис расположен. Кроме того, IIS обычно хочет .svc файл чтобы был с простейшим содержанием вроде:
Код

<%@ ServiceHost Language="C#" Debug="true" Service="WcfService1.Service1" CodeBehind="Service1.svc.cs" %>

либо, если .svc файла нет, то надо прописывать роуты в global.asax как для обычного web приложения... Можно, конечно, попробывать указать фабрику Factory="MyApp.MyServiceHostFactory", но я не думаю что это что-то даст на самом деле.

WAS
проще почитать в msdn

self-hosting
Вот тут вы ничем не ограничены. Пишите нечто вроде:
Код

  static void Main(string[] args)
        {
            var baseAddress = new Uri("http://0.0.0.0:1331/");
            // Create the ServiceHost.
            using (ServiceHost host = new ServiceHost(typeof(Service1), baseAddress))
            {
                // Enable metadata publishing.
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
                host.Description.Behaviors.Add(smb);

                // Open the ServiceHost to start listening for messages. Since
                // no endpoints are explicitly configured, the runtime will create
                // one endpoint per base address for each service contract implemented
                // by the service.
                host.Open();

                Console.WriteLine("The service is ready at {0}", baseAddress);
                Console.WriteLine("Press <Enter> to stop the service.");
                Console.ReadLine();

                // Close the ServiceHost.
                host.Close();
            }

и вуаля! всё работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)