如何使用web.conf在c#中创建web服务
本文关键字:web 创建 服务 何使用 conf | 更新日期: 2023-09-27 18:22:02
我对C#世界还很陌生,所以我知道的不多。我甚至找不到关于如何在不使用Visual Studio中的内置模板的情况下设置简单服务的简单分步文档。
我更喜欢使用下面的类和web.conf来制作我的服务。我不想使用任何依赖visual Studio或IIS魔术的.asmx文件。
我似乎无法让我的服务器对此做出响应。当我转到localhost:8152/02/service或localhost:8152/002/service/echo2时,我会得到一个404错误。
我的web.conf文件中有以下内容。
<system.serviceModel>
<services>
<service name ="hessian.test.HessianService" behaviorConfiguration="HttpGetMetadata">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8152/02/service"/>
</baseAddresses>
</host>
<endpoint address="/echo2" contract="hessian.test.HessianService.sayHello" binding="wsHttpBinding"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name ="HttpGetMetadata">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings />
<client />
</system.serviceModel>
这在我的.cs文件中
namespace hessian.test{
public class HessianService : WebService, testInterface
{
public void runVoid(int count)
{
}
public string sayHello()
{
return "Hello";
}
public string repeatMe(string s)
{
return s;
}
}
}
如有任何帮助,我们将不胜感激
我建议看一下WCF入门。WCF使用.svc文件而不是.asmx进行操作。以下是比较。
在您的示例中,您需要创建这样的合同:
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Web;
namespace WcfService1
{
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "sayhello")]
Stream SayHello();
}
}
然后一个实现可以是这样的:
using System.IO;
using System.ServiceModel.Web;
using System.Text;
namespace WcfService1
{
public class Service : IService
{
public Stream SayHello()
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
return new MemoryStream(Encoding.UTF8.GetBytes("hello"));
}
}
}
当然,所有重要的web.config
,注意serviceHostingEnvironment
元素,如果你不想创建.svc文件,它是必需的,尽管.svc文件不需要IIS,但你可以在任何地方托管它。
<system.serviceModel>
<services>
<service name="WcfService1.Service">
<endpoint address="" binding="webHttpBinding" contract="WcfService1.IService"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior>
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment>
<serviceActivations>
<add factory="System.ServiceModel.Activation.ServiceHostFactory" relativeAddress="./sayhello.svc" service="WcfService1.Service"/>
</serviceActivations>
</serviceHostingEnvironment>
</system.serviceModel>
在服务工作之前,你需要做好以下几件事:
- 将
ServiceContract
和OperationContract
分别应用于服务和操作声明 - 将
WebGet
属性应用于操作,以便它响应GET
请求 - 配置
service
和behaviors
,以便WCF可以读取它们并适当地处理事情
WCF功能强大,但它也有很多优点,这就是我最初建议WebApi的原因。它有一个更温和的学习曲线,假设您想使用REST而不是SOAP。还有NancyFx和ServiceStack 等替代方案