Написание толстого клиента с самостоятельным размещением проекта WCF для Windows с использованием Visual Studio 2010

Я исследовал это в течение нескольких дней безуспешно. У меня есть решение Visual Studio 2010 с несколькими проектами. Я пытаюсь создать толстый клиент в управляемом приложении, используя самостоятельный хостинг приложения службы WCF. Я перемещаю приложение для работы на машине с Windows 8, на которой НЕ установлена ​​Visual Studio.

На машине разработки все работает хорошо до тех пор, пока я не попытаюсь создать ServiceHost для целевой машины. Когда я пытаюсь добавить ServiceHost, машина разработки взрывается:

"HTTP could not register URL http://+:24324/DataService.svc/. Your process does not 
have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 
for details)."

Где я ошибаюсь? Любая помощь действительно приветствуется. Спасибо.

В клиентском app.config у меня есть:

  <client>
  <endpoint address="http://localhost:24324/DataService.svc" 
            binding="basicHttpBinding" 
            bindingConfiguration="BasicHttpBinding_INovaDataService" 
            contract="DataService.INovaDataService" 
            name="BasicHttpBinding_INovaDataService"/>
</client>

В конструкторе клиентского окна для клиентского проекта у меня есть:

Uri baseAddress = new Uri("http://localhost:24324/DataService.svc");
static ServiceHost host;

 ***Note: In the WCF project itself, "NovaDatServiceClient" is defined  as "NovaDataService"

        host = new ServiceHost(typeof(NovaDataServiceClient), baseAddress);   

        host.Open();    <--*ERROR --HTTP could not register 
          URL http://+:24324/DataService.svc/. Your process does not have access rights to this
         namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details)."}

В Web.config для приложения службы WCF у меня есть:

  <system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

person Alan Wayne    schedule 09.10.2014    source источник


Ответы (2)


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

http://msdn.microsoft.com/en-us/library/ms733768(v=vs.110).aspx

person PhillipH    schedule 09.10.2014
comment
Относится ли это к машине разработки в Visual Studio или только к целевой машине? Спасибо. - person Alan Wayne; 09.10.2014
comment
Просто целевая машина - person PhillipH; 09.10.2014
comment
Умм ... Любые предложения по отладке этого на машине разработки ... Автоматическая инициализация ASP.net во время отладки привязана к порту, не позволяя host.open () связываться с хостом службы :( - person Alan Wayne; 10.10.2014

См. http://msdn.microsoft.com/en-en/library/ms733768(v=vs.110).aspx

netsh http add urlacl url=http://+:24324/ user=DOMAIN\user
person Sohaty    schedule 09.10.2014
comment
Я отправил ваше предложение в cmd на машине разработки. Теперь во время отладки возникает ошибка: HTTP не удалось зарегистрировать URL ... потому что TCP-порт 24324 используется другим приложением. Помощь!? - person Alan Wayne; 09.10.2014
comment
Что ж, да, я считаю, что решение кроется в сообщении об ошибке. На этом сайте рассказывается, как узнать, какое приложение использует порт 24324. howtogeek.com/howto/28609/ Затем вы должны либо закрыть эту программу, либо изменить порт сервера WCF на тот, который еще не используется на целевом сервере. - person PhillipH; 09.10.2014
comment
@PhillipH Я почти уверен, что это сама визуальная студия, которая привязывается к порту во время сеанса отладки, прежде чем я смогу вызвать host.open (). Итак, я не могу поместить servicehost в код ?? - person Alan Wayne; 10.10.2014
comment
@PhillipH Нашел. F4 в проекте WCF, затем установите для ASP.net dev значение false. Спасибо. - person Alan Wayne; 10.10.2014