2010-07-28 110 views

回答

0

我找到了解决此问题的解决方法。 这个网站之前解决了我很多问题,所以我认为这将是很高兴分享回来。

快速回答你的问题是:

string empty = context.Execute<string>(new Uri("Operation", UriKind.Relative)).FirstOrDefault(); 

“空”字符串为空或空时响应。它“适用于”上面提到的HttpWebRequest方法。

此外,使用这种技术还可以得到原始类型。 比方说我有这样的方法:

[WebGet] 
public bool Authenticate(string Username, string Password) 
{...do stuff here...} 

当您尝试正常执行失败(维特克卡拉斯解释得好他效应初探以上):

var query = context.CreateQuery<bool>("Authenticate").AddQueryOption("Username", "'itye'").AddQueryOption("Password","'123456'"); 
DataServiceCollection<bool> list = new DataServiceCollection<bool>(); 
list.Load(query); 

但下面将做的伎俩:

var query = context.CreateQuery<bool>("Authenticate").AddQueryOption("Username", "'itye'").AddQueryOption("Password","'123456'"); 

bool authenticated = context.Execute<bool>(new Uri(query.RequestUri.ToString().Replace("Authenticate()", "Authenticate"))).FirstOrDefault(); 

请注意替换( “身份验证()”, “认证”),其省略了()的查询字符串(否则会造成错误)。

希望它有帮助。 - Itye

2

你可以使用只是普通的HttpWebRequest来做到这一点。我认为它将需要POST服务操作(因为GET会采取一些响应,但是由于您将其声明为无效,所以不会有任何响应)。在这种情况下,无论如何都不能使用Execute(因为它总是发出GET请求)。 使用普通的HttpWebRequest只是发出一个简单的POST服务操作URL,只是检查响应状态代码(应该是204无内容)。 当前WCF数据服务没有本地客户端对服务操作的支持,所以您需要为自己编写一个。

0

谢谢Itye 我正在寻找类似的解决方案。首先使用HttpWebRequest方式。但是你的两行代码帮助我完成了相同的任务。很高兴。再次感谢。 var query = context.CreateQuery(“Authenticate”)。AddQueryOption(“Username”,“'itye'”)。AddQueryOption(“Password”,“'123456'”);

bool authenticated = context.Execute(new Uri(query.RequestUri.ToString()。Replace(“Authenticate()”,“Authenticate”)))。FirstOrDefault();