尝试通过 HTTP 访问服务时出现 TCP 错误
Having TCP error when trying to access a service via HTTP
我有一个名为 "HelloWorldService" 的 Class 库类型项目,它具有以下接口:
namespace HelloWorldService
{
[ServiceContract]
public interface IHelloWorldService
{
[OperationContract]
string GetMessage(string message);
}
}
还有这个class:
namespace HelloWorldService
{
public class HelloWorldService : IHelloWorldService
{
public string GetMessage(string message)
{
return message;
}
}
}
我在我的解决方案中创建了一个网站,并在其中导入了 "HelloWorldService" 的引用。
所以,这个网站(称为 HelloWorldLocal)只有一个包含 "HelloWorldService.dll"、"HelloWorldService.pdb" 的 bin 文件夹,在 bin 文件夹外有这个 web.config 文件:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
</system.web>
<system.serviceModel>
<serviceHostingEnvironment>
<serviceActivations>
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="./HelloWorldLocal/HelloWorldLocal.svc" service="HelloWorldService.HelloWorldService"/>
</serviceActivations>
</serviceHostingEnvironment>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
现在,我在 "Default Web Site/HelloWorldLocal" 下通过 Visual Studio 在 IIS 上发布此网站,当我尝试访问 http://localhost/HelloWorldLocal/HelloWorldService.svc
时,我收到此 TCP 错误:
Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http].
想法?
谢谢。
尝试更改以下行
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="./HelloWorldLocal/HelloWorldLocal.svc" service="HelloWorldService.HelloWorldService"/>
至
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="HelloWorldLocal.svc" service="HelloWorldService.HelloWorldService"/>
我已经解决了我的问题,方法是打开 IIS 管理器,在网站上单击右键,然后选择“管理应用程序”>“高级设置”。
然后在打开的 window 上,有一个 "Enabled Protocols" 属性 只有 http。我添加了 "net.tcp" 并且有效。
不知道为什么,但确实如此。
我有一个名为 "HelloWorldService" 的 Class 库类型项目,它具有以下接口:
namespace HelloWorldService
{
[ServiceContract]
public interface IHelloWorldService
{
[OperationContract]
string GetMessage(string message);
}
}
还有这个class:
namespace HelloWorldService
{
public class HelloWorldService : IHelloWorldService
{
public string GetMessage(string message)
{
return message;
}
}
}
我在我的解决方案中创建了一个网站,并在其中导入了 "HelloWorldService" 的引用。 所以,这个网站(称为 HelloWorldLocal)只有一个包含 "HelloWorldService.dll"、"HelloWorldService.pdb" 的 bin 文件夹,在 bin 文件夹外有这个 web.config 文件:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
</system.web>
<system.serviceModel>
<serviceHostingEnvironment>
<serviceActivations>
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="./HelloWorldLocal/HelloWorldLocal.svc" service="HelloWorldService.HelloWorldService"/>
</serviceActivations>
</serviceHostingEnvironment>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
现在,我在 "Default Web Site/HelloWorldLocal" 下通过 Visual Studio 在 IIS 上发布此网站,当我尝试访问 http://localhost/HelloWorldLocal/HelloWorldService.svc
时,我收到此 TCP 错误:
Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http].
想法?
谢谢。
尝试更改以下行
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="./HelloWorldLocal/HelloWorldLocal.svc" service="HelloWorldService.HelloWorldService"/>
至
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="HelloWorldLocal.svc" service="HelloWorldService.HelloWorldService"/>
我已经解决了我的问题,方法是打开 IIS 管理器,在网站上单击右键,然后选择“管理应用程序”>“高级设置”。
然后在打开的 window 上,有一个 "Enabled Protocols" 属性 只有 http。我添加了 "net.tcp" 并且有效。
不知道为什么,但确实如此。