簡體   English   中英

如何在Web服務中公開接口

[英]How to expose an interface in web service

我希望在我的WCF服務上有一個函數,其返回類型作為接口,但是當我從客戶端調用它時,我收到一個System.Object ,而不是實現服務發送的接口的類。

以下是一些示例代碼:

[ServiceContract]
public interface IService
{
    [OperationContract]
    string SayHello();

    [OperationContract]
    IMyObject GetMyObject();
}

public interface IMyObject
{
    int Add(int i, int j);
}

[DataContract]
public class MyObject : IMyObject
{
    public int Add(int i, int j)
    {
        return i + j;
    }
}

在這項服務的實施中,我有:

public class LinqService : IService
{
    public string SayHello()
    {
        return "Hello";
    }

    public IMyObject GetMyObject()
    {
        return new MyObject();
    }
}

SayHello()運行良好,但GetMyObject()返回一個System.Object 如何更改此代碼以便GetMyObject()返回一個實現IMyObject的對象?

編輯1

更改代碼如下:

using System.Runtime.Serialization;
using System.ServiceModel;

[ServiceContract]
public interface IService
{
    [OperationContract]
    string SayHello();

    [OperationContract]
    IMyObject GetMyObject();
}

[ServiceKnownType(typeof(MyObject))]
public interface IMyObject
{
    [OperationContract] 
    int Add(int i, int j);
}

[DataContract]
public class MyObject:IMyObject
{
    public int Add(int i, int j)
    {
        return i + j;
    }
}

但沒有成功!

所有WCF合約參數和返回類型都必須是可序列化的; 接口不是。 這個問題探討了圍繞KnownType屬性的答案的同一問題; 如果您要傳回IMyObject各種實現,我建議這樣做,否則您必須將返回類型更改為MyObject

有關序列化的其他說明以下規則也適用於數據協定序列化程序支持的類型:

數據協定序列化程序完全支持泛型類型。

數據協定序列化程序完全支持可空類型。

接口類型被視為Object,或者在集合接口的情況下,被視為集合類型。

.....

請參閱有關序列化的完整MSDN附加說明


編輯:

我猜你在談論客戶激活對象。 要了解更多相關信息,請參閱以下帖子從WCF服務返回接口您看到只能通過WCF中的序列化發送數據,但不能實現。 問題的另一種方式是使用實例化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM