0

我有以下 Wcf 数据服务:

public class WcfDataService : DataService<WcfDataServiceContext>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
        config.UseVerboseErrors = true;
    }

    [WebGet]
    public IQueryable<Person> GetPeopleByName(string name)
    {
        WcfDataServiceContext context = this.CurrentDataSource;

        var match = from p in context.People
                    where p.FirstName == name
                    select p;

        return match;
    }

我可以像这样从浏览器访问自定义方法:

http://127.0.0.1:8080/DataService/WcfDataService.svc/GetPeopleByName?name='Daniel'

如何调用该方法并从 Silverlight 应用程序中获取 Person 列表?

我正在使用 Visual Studio 2012、Silverlight 5、.NET Framework 4.0。

4

2 回答 2

0

据我记得,在使用 Silverlight 时,您无法连接到与 Silverlight 应用程序来源不同的服务器,因此您只需使用相对的 Uri。如果你想使用 WCF 数据服务客户端,你可以看看这里:http ://forums.silverlight.net/t/208481.aspx - 有一个代码片段显示它。但是,AFAIK WCF 数据服务客户端不支持服务操作,因此您可能需要使用 XmlReader 才能查询和解析 GetPeopleByName 函数的响应。

于 2012-10-10T20:42:42.627 回答
0

在我可以分享之前我已经这样做了。服务参考您的域:8080/DataService/WcfDataService.svc 然后对于 Person 对象使用[DataContract]属性,用于 Peson 的属性使用[global::System.Runtime.Serialization.DataMemberAttribute()] 通过这个你说序列化并创建总线端代理的方式。请注意此属性,因为它确实有效!

//Here is the interface attributes are important

 namespace AHBSBus.Web.Services
{
[ServiceContract]
public interface IChatService
{
    [OperationContract]
    bool LogIn(Guid userID,Guid roomID);

    [OperationContract]
    bool LogOut(Guid userID,Guid roomID);

    [OperationContract]
    IEnumerable<VW_CHATUSERDETAIL> GetLatestMessages(Guid userID,Guid roomID,Guid lastSyncMessageID);

    [OperationContract]
    bool SendMessage(Guid fromID, Guid roomID, Guid toID, string message);

    [OperationContract]
    IEnumerable<ChatUser> GetLoggedInUsers(Guid roomID);

    [OperationContract]
    bool IsLogin(Guid roomID,Guid userID);
}
}


//Implementation of service 

   [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
  public partial class ChatService:IChatService
  {
    //Here goes 
  }
于 2012-10-11T08:39:59.347 回答