2010-02-04 91 views
1

我在Visual Studio 2008中编写了一个WCF服务,以在Windows 2008 Standard服务器上托管。WCF服务405方法不允许异常

我在IIS7中创建了一个新的Web站点,它自己的应用程序针对ASP.NET 2.0。我将.NET 3.0 Framework功能添加到服务器角色。我已经完成了所有涉及* .svc扩展和aspnet_isapi模块的步骤。我运行“ServiceModelReg -r”并重新启动IIS以及服务器本身。

我的项目针对构建的.NET框架3.5。我的解决方案将项目作为使用服务器Web目录的UNC路径的Web站点引用。该项目生成没有错误,我可以成功地添加一个服务引用到我的客户端项目(在我的Win XP开发虚拟机)我的WCF服务。我的客户端项目建立并运行,但在服务方法(CheckDatabaseConnection)调用期间抛出异常。我的web.config和服务类在下面附加,然后是客户端应用程序。我已经完全没有想法了!

的web.config:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" /> 
    <services> 
     <service behaviorConfiguration="ConnectivityBehavior" name="EDCO.Web.Services.Connectivity"> 
      <endpoint address="http://validurl.net" binding="wsHttpBinding" contract="EDCO.Web.Services.IConnectivity"> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ConnectivityBehavior"> 
       <serviceMetadata httpGetEnabled="true"/> 
       <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

IConnectivity.cs:

[ServiceContract(Namespace="http://validurl.net")] 
public interface IConnectivity 
{ 
    #region Methods 

    [WebGet()] 
    [WebInvoke(Method="GET")] 
    [OperationContract()] 
    bool CheckDatabaseConnection(string server, string database, string user, string password); 

    #endregion Methods 
} // interface IConnectivity 

Connectivity.svc.cs:

public class Connectivity : IConnectivity 
{ 
    #region Members 

    const string CONN_STRING = "Server={0};Database={1};User ID={2};Password={3};"; 

    #endregion Members 

    #region Methods 

    public bool CheckDatabaseConnection(string server, string database, string user, string password) 
    { 
     SqlConnection conn = null; 

     try 
     { 
      conn = new SqlConnection(string.Format(CONN_STRING, server, database, user, password)); 
      conn.Open(); 
     } 
     catch 
     { 
      return false; 
     } 
     finally 
     { 
      if (conn != null) 
      { 
       if (conn.State != ConnectionState.Closed) 
       { 
        conn.Close(); 
       } 
       conn.Dispose(); 
      } 
     } 

     return true; 
    } // CheckDatabaseConnection(server, database, user, password) 

    #endregion Methods 
} // class Connectivity 

客户端的Program.cs:

class Program 
{ 
    #region Methods 

    static void Main(string[] args) 
    { 

     Connectivity.ConnectivityClient connect = new Connectivity.ConnectivityClient(); 

     Console.WriteLine("Establishing connection..."); 
     if (connect.CheckDatabaseConnection("dbServer", "dbName", "login", "password")) 
     { 
      Console.WriteLine("Successful connection!"); 
     } 
     else 
     { 
      Console.WriteLine("Connection failed."); 
     } 
     Console.ReadLine(); 
    } // Main() 

    #endregion Methods 
} // class Program 

回答

4

OK,它看起来像我通过增加一个身份元素,我的web.config解决了这个问题。奇怪的是,这并不是在互联网上浮现的答案之一,但我偶然看到一个几乎不相关的文章。修正如下:

 <service behaviorConfiguration="ConnectivityBehavior" name="EDCO.Web.Services.Connectivity"> 
      <endpoint address="http://validurl.net/Connectivity.svc" binding="wsHttpBinding" contract="EDCO.Web.Services.IConnectivity"> 
       <identity> 
        <dns value="validurl.net" /> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
相关问题