如何自定义svc webservicee.svc的cs文件

WCF Service重命名之后,在客户端就会出现服务类型找不到的错误。要分析解决这个问题,我们就要从svc、config和code文件之间的关系入手来分析。。。
新添加一个WCF Service项,命名为OrderService.svc,然后把svc的文件名改成其他的名字,比如OrderProcessorService.svc。编译通过之后,试图从客户端访问这个service的时候,就会报错说找不到这个服务类型,如下:
The type 'WcfSrvDemo4.OrderService', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.
解决这个问题的方法很简单,但是原因我们要做详细说明。
首先,打开svc文件,你会发现只有一行像这样的内容:&%@ ServiceHost Language="C#" Debug="true" Service="WcfSrvDemo4.OrderService" CodeBehind="OrderProcessorService.svc.cs" %&。这里有两个重要参数,Service和CodeBehind。编辑状态下,CodeBehind一般不会出错,因为当你修改svc文件的时候,这里会自动更新;但是Service只有在利用重构的方法修改Service类名的的时候才会被更新到,利用其它方法修改类名,这里就会保留原值,所以这里往往是容易出错的地方。
其次,在运行时,宿主程序从svc文件中的Service属性得到WCF Service的完全限定名,然后从配置文件中找到同名的service,进而找到所有的EndPoint,并根据其属性进行实例化。如果svc文件中的Service属性和配置文件中的Service名字不匹配,就无法找到EndPoint以及它的配置信息。
最后,配置文件中的Service名字必须是Service类名的完全限定名(即Namespace.classname),EndPoint的Contract必须是Service接口的完全限定名。否则,程序就无法从程序集中找到相应的类进行加载。
明白了svc、config和code文件之间的关系之后,就会很容易在错误出现的时候,很快锁定错误的范围进而解决问题。
阅读(...) 评论()自由、创新、研究、探索
Linux/Windows Mono/DotNet [ Open Source .NET Development/ 使用开源工具进行DotNet软件开发]锐意进取,志存高远.成就梦想,只争朝夕.从你开始,创新世界.【That I exist is a perpetual supprise which is life. Focus on eCommerce】
WCF Service重命名之后,在客户端就会出现服务类型找不到的错误。要分析解决这个问题,我们就要从svc、config和code文件之间的关系入手来分析。。。
新添加一个WCF Service项,命名为OrderService.svc,然后把svc的文件名改成其他的名字,比如OrderProcessorService.svc。编译通过之后,试图从客户端访问这个service的时候,就会报错说找不到这个服务类型,如下:
The type 'WcfSrvDemo4.OrderService', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.
解决这个问题的方法很简单,但是原因我们要做详细说明。
首先,打开svc文件,你会发现只有一行像这样的内容:&%@ ServiceHost Language="C#" Debug="true" Service="WcfSrvDemo4.OrderService" CodeBehind="OrderProcessorService.svc.cs" %&。这里有两个重要参数,Service和CodeBehind。编辑状态下,CodeBehind一般不会出错,因为当你修改svc文件的时候,这里会自动更新;但是Service只有在利用重构的方法修改Service类名的的时候才会被更新到,利用其它方法修改类名,这里就会保留原值,所以这里往往是容易出错的地方。
其次,在运行时,宿主程序从svc文件中的Service属性得到WCF Service的完全限定名,然后从配置文件中找到同名的service,进而找到所有的EndPoint,并根据其属性进行实例化。如果svc文件中的Service属性和配置文件中的Service名字匹配,就无法找到EndPoint以及它的配置信息。
最后,配置文件中的Service名字必须是Service类名的完全限定名(即Namespace.classname),EndPoint的Contract必须是Service接口的完全限定名。否则,程序就无法从程序集中找到相应的类进行加载。
明白了svc、config和code文件之间的关系之后,就会很容易在错误出现的时候,很快锁定错误的范围进而解决问题。
阅读(...) 评论()
随笔 - 15567
评论 - 1198WCF自定义地址路由映射(不用svc文件) - 紫色之心 - 推酷
WCF自定义地址路由映射(不用svc文件) - 紫色之心
一般在创建WCF服务时会用Serivce.svc文件访问,地址如:http://localhost/applicationname/Serivce.svc/Name
现在用路由映射成:http://localhost/applicationname/MyService/Name& 方法如下:
首先在Global.asax中的Application_Start事件中添加以下代码:
void Application_Start(object sender, EventArgs e)
&&&&&&& System.Web.Routing.RouteTable.Routes.Add(newSystem.ServiceModel.Activation.ServiceRoute(&MyService&, new System.ServiceModel.Activation.WebServiceHostFactory(), typeof(Service)));&
其中&MyService&为自定义要在地址栏中映射的名称,如: http://localhost/applicationname/MyService/Name
typeof(Service)中的&Service&为WCF中服务实现类Service.cs,一般继承IService.cs接口
接下来必须在web.config中&serviceHostingEnvironmentmultipleSiteBindingsEnabled=&true& aspNetCompatibilityEnabled=&true&&的aspNetCompatibilityEnabled设为true
然后再在Service.cs服务类上面添加:
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]& //记得引用using System.ServiceModel.A
public class Service : IService
public string GetName(string Name)
return &your name is & + N
此外还有IService.cs接口中方法声明中设置UriTemplate以接受参数:
[ServiceContract]
public interface IService
[OperationContract, WebGet(UriTemplate = &{Name}&, BodyStyle =WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
string GetName(string Name);
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

参考资料

 

随机推荐