从具有管理权限的 CMD 运行服务和从 Visual Studio 启动服务没有区别。
鉴于官方文档太旧,我尝试重现您的问题。但是我发现我们仍然可以从浏览器访问服务类库中的配置不再有效,Url 基地址和绑定类型采用控制台应用程序配置。基于 HttpGetEnabled 属性的服务描述页面。因此,服务描述 URL 是服务基 URL,而不是服务端点地址(http://localhost:8000/GettingStarted/CalculatorService)。
Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/");
ServiceHost selfHost = new ServiceHost(typeof(WcfServiceLibrary1.Service1), baseAddress);
try
{
selfHost.AddServiceEndpoint(typeof(WcfServiceLibrary1.IService1), new WSHttpBinding(), "CalculatorService");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
这是一个在控制台应用程序中托管服务而不参考任何其他项目的示例。希望对你有用。
class Program
{
static void Main(string[] args)
{
Uri uri = new Uri("http://localhost:21011");
BasicHttpBinding binding = new BasicHttpBinding();
using (ServiceHost sh = new ServiceHost(typeof(MyService), uri))
{
sh.AddServiceEndpoint(typeof(IService), binding, "");
ServiceMetadataBehavior smb;
smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
smb = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};
sh.Description.Behaviors.Add(smb);
}
Binding mexbinding = MetadataExchangeBindings.CreateMexHttpBinding();
sh.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "mex");
sh.Opened += delegate
{
Console.WriteLine("Service is ready");
};
sh.Closed += delegate
{
Console.WriteLine("Service is clsoed");
};
sh.Open();
Console.ReadLine();
//pause
sh.Close();
Console.ReadLine();
}
}
}
[ServiceContract]
public interface IService
{
[OperationContract]
string Test();
}
public class MyService : IService
{
public string Test()
{
return DateTime.Now.ToString();
}
}
然后我们访问服务定义页面,http://localhost:21011
如果有什么我可以帮忙的,请随时告诉我。