2013-07-05 2 views
0

Я просмотрел другие подобные вопросы, но не смог решить свою проблему.Служба WCF работает с localhost, но не с IP-адресом

У меня есть службы WCF, которая работает при подключении к нему:

http://localhost:35001/SchoolLightService.svc 

но если я использую IP-адрес компьютера (из локальной сети):

http://192.168.1.4:35001/SchoolLightService.svc 

сообщение об ошибке (пришлось изменить номер IP (выше) один на «мой IP» в угоду Stackoverflow):

Error: Cannot obtain Metadata from http://"my ip":35001/SchoolLightService.svc If this is a Windows (R) 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://"my ip":35001/SchoolLightService.svc
Metadata contains a reference that cannot be resolved: 'http://"my ip":35001/SchoolLightService.svc'. There was no endpoint listening at http://"my ip":35001/SchoolLightService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. Unable to connect to the remote server No connection could be made because the target machine actively refused it "my ip":35001HTTP GET Error URI: http://"my ip":35001/SchoolLightService.svc There was an error downloading 'http://"my ip":35001/SchoolLightService.svc'.
Unable to connect to the remote server No connection could be made because the target machine actively refused it "my ip":35001

web.config выглядит так:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5"> 
     <assemblies> 
     <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     </assemblies> 
    </compilation> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="SLBehavior"> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpGetUrl="" /> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services > 
     <service name="SchoolLightWCF.SchoolLightService" 
       behaviorConfiguration="SLBehavior"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://192.168.1.4:35001" /> 
      </baseAddresses> 
     </host> 
     <endpoint 
      address="/SchoolLightService" 
      binding="wsHttpBinding" 
      contract="SchoolLightWCF.ISchoolLightService" 
     /> 
     <endpoint 
      address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" 
     /> 
     </service> 

    </services> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <diagnostics> 

     <messageLogging 
     logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false" 
      logMalformedMessages="true" logEntireMessage="true" 
      maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" /> 

    </diagnostics> 
    </system.serviceModel> 
    <system.diagnostics> 
    <sharedListeners> 
     <add name="sharedListener" 
     type="System.Diagnostics.XmlWriterTraceListener" 
     initializeData="c:\temp\tracelog.svclog" /> 
    </sharedListeners> 
    <sources> 
     <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing" > 
     <listeners> 
      <add name="sharedListener" /> 
     </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" switchValue="Verbose"> 
     <listeners> 
      <add name="sharedListener" /> 
     </listeners> 
     </source> 
     <source name="ApplicationLogging" switchValue="Information" > 
     <listeners> 
      <add name="sharedListener" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true" /> 
    </system.webServer> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
    <connectionStrings> 
    <add name="SLEntities" connectionString="...not relevant..." /> 
    </connectionStrings> 
</configuration> 

Что я делаю неправильно?

+0

Как насчет проверки брандмауэра? –

+0

Я добавил правило для входа в порт, но не имеет никакого эффекта. У меня есть маршрутизатор, но это не имеет значения, так как я просто работаю в локальной сети, не так ли? – SamiHuutoniemi

+0

Я пробовал telnet к порту. Если я использую localhost, он работает нормально. Если я использую IP-адрес (192.168.1.4), он не может подключиться. Брандмауэр Windows отключен, а маршрутизатор имеет набор переадресации портов. – SamiHuutoniemi

ответ

0

Я решил это, опубликовав его на реальном сервере IIS, запущенном на компьютере. По какой-то причине встроенный веб-сервер в Visual Studio не сократил его.

+0

Вау, я думал, вы делаете это на IIS. Встроенный веб-сервер НЕ отвечает на удаленные запросы по дизайну. –

+0

Да, не знал, что :) – SamiHuutoniemi

+0

Да, IIS будет работать, но есть ли способ достичь этого, оставаясь в Debug в Visual Studio? – Amit

Смежные вопросы