我使用需要使用的endpointaddress创建我的主机,如下所示:
Uri endpointAddress = new Uri("http://127.0.0.1:5555/MyService");
ServiceHost host = new ServiceHost(myServiceType, endpointAddress);
host.AddServiceEndpoint(implementedContract, basicHttpBinding, string.Empty);
但是当我稍后做host.Open();
时,我得到了异常“HTTP无法注册URL http://+:80/MyService/,因为另一个应用程序正在使用TCP端口80”。我做的结果是一样的
host.AddServiceEndpoint(implementedContract, basicHttpBinding, endpointAddress);
为什么要尝试对80端口做任何事情?我该如何解决这个问题?
更新 在尝试提供更完整的代码示例时,我找到了罪魁祸首。我添加了一个ServiceMetadataBehavior,如下所示:
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.ExternalMetadataLocation = new Uri(this.ExternalMetadataLocation);
smb.HttpGetEnabled = true;
smb.HttpGetUrl = this.RemovePort(this.EndpointAddress);
host.Description.Behaviors.Add(smb());
过去我似乎需要从URL中删除端口才能使其正常工作,但现在这正是造成问题的原因。
所以Pratik是对的:元数据是问题,当然端口80的问题是有一些新安装的应用程序使用该端口。
谢谢,问候,
米尔。
答案 0 :(得分:1)
以下对我来说很好:
class Program
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
void Test();
}
public class MyService : IMyService
{
public void Test()
{
throw new NotImplementedException();
}
}
static void Main()
{
var endpointAddress = new Uri("http://127.0.0.1:5555/MyService");
using (var host = new ServiceHost(typeof(MyService), endpointAddress))
{
var basicHttpBinding = new BasicHttpBinding();
host.AddServiceEndpoint(typeof(IMyService), basicHttpBinding, string.Empty);
host.Open();
}
}
}
也许你有其他一些干扰的代码?
答案 1 :(得分:1)
这是因为端口80已被另一个应用程序使用,因为错误消息显示,很可能是本地IIS服务器。尝试停止IIS并查看或使用其他端口。 在vista及更高版本上,您可以使用netsh命令检查哪些端口已被保留
BTW你在app.config或web.config文件中有http元数据或mex端点吗?