Я пишу службу 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:
<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