以下代码导致“找不到服务端点”错误。它使用部分类和部分接口。当我不使用部分类/接口时,它工作正常......任何错误?
[ServiceContract]
public partial interface IMySvc
{
[WebGet(UriTemplate = "...")]
[OperationContract]
Stream GetProducts_1();
[WebGet(UriTemplate = "...")]
[OperationContract]
Stream GetProducts_2();
}
public partial interface IMySvc
{
[WebGet(UriTemplate = "...")]
[OperationContract]
Stream GetProducts_3();
[WebGet(UriTemplate = "...")]
[OperationContract]
Stream GetProducts_4();
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public partial class MySvc: IMySvc
{
//implementations of GetProducts_1, GetProducts_2
}
public partial class MySvc: IMySvc
{
//implementations of GetProducts_3, GetProducts_4
}
在Global.asxc中:
RouteTable.Routes.Add(new ServiceRoute("task", new WebServiceHostFactory(), typeof(MySvc)));
答案 0 :(得分:0)
这可能与它是部分类无关。这可能是许多不同的问题。你需要缩小问题的来源。尝试:
答案 1 :(得分:0)
这里是我如何制作我的例子
这将是第一组方法
[ServiceContract]
public partial interface IDefaultInterface
{
[OperationContract]
string getData1();
}
public partial class CDefaultClass : IDefaultInterface
{
public getData1(){ return "data 1"; }
}
这将是您希望拆分的另一组方法
[ServiceContract]
public partial interface IDefaultInterface2
{
[OperationContract]
string getData2();
}
public partial class CDefaultClass2 : IDefaultInterface2
{
public getData2(){ return "data 2"; }
}
以下是我的衍生逻辑与评论
namespace wcfMyService
{
// this list all derivation for the easy to follow service.
// this service will have LOTS of function so ability
// to split in multiple classes was necessary
// on client side we only see 1 set of function all mixed together
// but at least working on it it's easy to follow for us since we have a structure
#region Class Derivation
public class CDerivative : CDefaultClass { }
public partial class CDefaultClass : CDefaultClass2 { }
// NOTE THAT ALL NEW CLASSES MUST :
// - Be PARTIAL classes
// - Implement their OWN interface
// new class would be
// public partial class CDefaultClass2 : CMyNewClass { }
// and so on. previous class derive from the new class
#endregion
#region Interface Derivation
[ServiceContract]
public interface IDerivative : IDefaultInterface { }
public partial interface IDefaultInterface : IDefaultInterface2 { }
// NOTE THAT ALL NEW INTERFACE MUST :
// - Be PARTIAL Interface
// - Have attribute [ServiceContract]
// - all methods need [OperationContract] as usual
// new class interface would be
// public partial interface IDefaultInterface2 : IMyNewClass { }
// and so on. previous class interface derive from the new class interface
#endregion
}
现在您的普通服务接口只需添加派生AND接口,因此终点可以查看所有派生类的所有功能。 Class内部不需要代码从其各自的接口实现自己的方法。因此,每个类中没有数百万个方法的集群
[ServiceContract]
public interface IService : IDerivative
{
}
最后,您需要将SVC / ASMX(无论如何)编码如下,以便为WSDL等公开所有内容。再次,这个类中不需要代码
public partial class Service : CDerivative, IService
{
}
总而言之,当您希望在另一个类中使用新方法以获得更好的结构时,您需要做的就是创建部分接口和部分类,就像通常创建服务合同和操作一样。然后只需进入衍生文件,并将接口和类添加到派生中。因为它们都只实现自己的接口,所以不应该有任何冲突,当你编码时,你永远不会看到其他类的方法。
我非常喜欢这个组织,并使用适当的文件夹制作漂亮的树状视图,我可以快速找到其中数千个方法。