2013-03-22 114 views
0

我一直在研究一种服务,该服务将用于身份验证以及为Android客户端和桌面客户端发送和接收数据。该服务基于之前创建的模板,用于需要使用SQL成员资格提供程序的身份验证服务的人员。从C#客户端访问WCF服务中的方法时遇到问题

所以这个项目被分成了3个。一个是公共授权类,另一个是WCF服务,第三个是我用C#开始的客户端。

我的问题是,我无法从我已经添加到服务/接口的客户端访问任何新的方法。除了新的,我可以访问所有其他的。它也不会在intellisense中显示。我有一个用于引用该项目的Web引用。我不确定为什么它是一个Web引用而不是服务引用,除非我很快意识到它不允许由于授权而添加服务引用。它基本上一直在不停地询问证书。

这里是服务的一个例子:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using System.Security.Permissions; 
using System.ServiceModel.Activation; 

namespace DevLake.BasicAuth.Service 
{ 
    // AspNetCompatibilityRequirements is needed to capture the HttpContext.Current in establishing authorization 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
    public class BasicAuthService : IBasicAuthService 
    { 
     public string TestServiceOK() 
     { 
      return "Basic Auth Service Working"; 
     } 

     [PrincipalPermission(SecurityAction.Demand, Role = "Role1")] 
     public string TestRoleAccess() 
     { 
      return "Role can access"; 
     } 

     public string TestMyService() 
     { 
      return DateTime.Now.ToString(); 
     } 

     public void TestError() 
     { 
      throw new System.Exception("Test Exception"); 
     } 
    } 
} 

这里是匹配接口的例子:我使用来调用这些方法的代码的一个简单的例子

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 

namespace DevLake.BasicAuth.Service 
{ 
    [ServiceContract] 
    public interface IBasicAuthService 
    { 
     [OperationContract] 
     string TestServiceOK(); 

     [OperationContract] 
     string TestRoleAccess(); 

     [OperationContract] 
     string TestMyService(); 

     [OperationContract] 
     void TestError(); 

     } 
} 

而且服务:

private void btnTestService_Click(object sender, RoutedEventArgs e) 
     { 

      try 
      { 
       wsBasicAuthService.BasicAuthService c = new wsBasicAuthService.BasicAuthService(); 
       c.Credentials = new NetworkCredential(txtUserName.Text, txtPassword.Password); 
       MessageBox.Show(c.TestServiceOK()); 

      } 
      catch (System.Exception ex) 
      { 
       MessageBox.Show("Error: " + ex.Message); 
      } 
     } 

任何人都可以看到任何可能导致此问题?

回答

0

您是否尝试过更新您的参考?你应该能够右键点击参考和更新。如果这不起作用,请将其删除并重新添加并查看是否有效。

+0

呃哦,好像我有一个新问题。当我尝试更新引用时,我遇到与尝试添加服务引用时相同的错误。它只是不断重复询问用户名和密码的对话框。 – user1632018 2013-03-22 01:57:12

+0

好消息是现在我知道我的第一个问题是参考需要更新。非常感谢你的帮忙。 – user1632018 2013-03-22 02:02:11

+0

如果您的服务正在另一台计算机上运行,​​它应该提示输入凭据。您应该为服务所在的计算机输入凭据。 – 2013-03-22 02:03:18

相关问题