Метод WCF Service 405 недопустимое исключение

Я пишу службу WCF в Visual Studio 2008 для размещения на сервере Windows 2008 Standard.

Я создал новый веб-сайт в IIS7 с собственным приложением, ориентированным на ASP.NET 2.0. Я добавил функции .NET 3.0 Framework в роль сервера. Я уже прошел все шаги, связанные с расширениями * .svc и модулем aspnet_isapi. Я запустил «ServiceModelReg -r» и перезапустил IIS, а также сам сервер.

Мой проект нацелен на .NET framework 3.5 для сборок. Мое решение ссылается на проект как на веб-сайт, используя UNC-путь к веб-каталогу сервера. Проект создается без ошибок, и я могу успешно добавить ссылку на мою службу WCF в свой клиентский проект (на моей виртуальной машине разработки Win XP). Мой клиентский проект строится и запускается, но выдает исключение во время вызова метода службы (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

client 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

person CoderHead    schedule 04.02.2010    source источник


Ответы (1)


Хорошо, похоже, я решил проблему, добавив элемент идентификации в свой 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>
person CoderHead    schedule 04.02.2010