Witam, podczas dodawania odwołania do usługi WCF pojawia się błąd. Zacznę może od początku. A więc próbowałem dodać takie odwołanie na testowym projekcie i nie chciało mi to przejść i wystarczyło tylko zmienić znacznik w pliku .svc serwisu WCF (usunięcie CodeBehind) i wszystko ładnie śmigało. Spróbowałem więc przenieść to rozwiązanie do mojego głównego projektu i nie wiadomo z jakich powodów już mi to nie chce przejść. Po wielu próbach dalej mi się to nie udawało, więc jeszcze raz dla pewności sprawdziłem dla świeżego projektu jak wygląda sytuacja i niestety nawet na świeżym projekcie dodanie odwołania do usługi zwraca błąd.
Moja usługa WCF nazywa się WcfService1 i mam tam pliki IService1.cs oraz Service1.svc.
Znacznik wewnątrz Service1.svc:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfService1.Service1" %>
Kod wewnątrz Service1.svc (całkowicie standardowy):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace WcfService1
{
// UWAGA: możesz użyć polecenia „Zmień nazwę” w menu „Refaktoryzuj”, aby zmienić nazwę klasy „Service1” w kodzie, usłudze i pliku konfiguracji.
// UWAGA: aby uruchomić klienta testowego WCF w celu przetestowania tej usługi, wybierz plik Service1.svc lub Service1.svc.cs w eksploratorze rozwiązań i rozpocznij debugowanie.
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
}
Kod wewnątrz IService.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace WcfService1
{
// UWAGA: możesz użyć polecenia „Zmień nazwę” w menu „Refaktoryzuj”, aby zmienić nazwę interfejsu „IService1” w kodzie i pliku konfiguracji.
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: dodaj tutaj operacje usługi
}
// Użyj kontraktu danych, jak pokazano w poniższym przykładzie, aby dodać typy złożone do operacji usługi.
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
}
Błąd, który pojawia się podczas dodawania odwołania do usługi:
Podczas pobierania „http://localhost:49823/Service1.svc/$metadata” wystąpił błąd.
Żądanie nie powiodło się. Komunikat o błędzie:
--
<!DOCTYPE html>
<html>
<head>
<title>Nie można odnaleźć typu „WcfService1.Service1” dostarczonego jako wartość atrybutu Service w dyrektywie ServiceHost lub w elemencie konfiguracji system.serviceModel/serviceHostingEnvironment/serviceActivations.</title>
<meta name="viewport" content="width=device-width" />
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:pointer; }
@media screen and (max-width: 639px) {
pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
}
@media screen and (max-width: 479px) {
pre { width: 280px; }
}
</style>
</head>
<body bgcolor="white">
<span><H1>Błąd serwera w aplikacji '/'.<hr width=100% size=1 color=silver></H1>
<h2> <i>Nie można odnaleźć typu „WcfService1.Service1” dostarczonego jako wartość atrybutu Service w dyrektywie ServiceHost lub w elemencie konfiguracji system.serviceModel/serviceHostingEnvironment/serviceActivations.</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Opis: </b>Podczas wykonywania bieżącego żądania sieci Web wystąpił nieobsługiwany wyjątek. Aby uzyskać dodatkowe informacje o błędzie i miejscu jego występowania w kodzie, przejrzyj ślad stosu.
<br><br>
<b> Szczegóły wyjątku: </b>System.InvalidOperationException: Nie można odnaleźć typu „WcfService1.Service1” dostarczonego jako wartość atrybutu Service w dyrektywie ServiceHost lub w elemencie konfiguracji system.serviceModel/serviceHostingEnvironment/serviceActivations.<br><br>
<b>Błąd źródła:</b> <br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code>
Podczas wykonywania bieżącego żądania sieci Web został wygenerowany nieobsługiwany wyjątek. Informacje dotyczące pochodzenia i lokalizacji wyjątku można zidentyfikować przy użyciu poniższego śladu stosu wyjątku. </code>
</td>
</tr>
</table>
<br>
<b>Ślad stosu:</b> <br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code><pre>
[InvalidOperationException: Nie można odnaleźć typu „WcfService1.Service1” dostarczonego jako wartość atrybutu Service w dyrektywie ServiceHost lub w elemencie konfiguracji system.serviceModel/serviceHostingEnvironment/serviceActivations.]
System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +57433
System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +1489
System.ServiceModel.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity) +53
System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +666
[ServiceActivationException: Nie można aktywować usługi „/Service1.svc”, ponieważ wystąpił wyjątek podczas kompilacji. Komunikat dotyczący wyjątku: Nie można odnaleźć typu „WcfService1.Service1” dostarczonego jako wartość atrybutu Service w dyrektywie ServiceHost lub w elemencie konfiguracji system.serviceModel/serviceHostingEnvironment/serviceActivations..]
System.Runtime.AsyncResult.End(IAsyncResult result) +513037
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +182
System.ServiceModel.Activation.ServiceHttpHandler.EndProcessRequest(IAsyncResult result) +12
System.Web.CallHandlerExecutionStep.InvokeEndHandler(IAsyncResult ar) +161
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +182
System.ServiceModel.Activation.ServiceHttpHandler.EndProcessRequest(IAsyncResult result) +12
System.Web.CallHandlerExecutionStep.InvokeEndHandler(IAsyncResult ar) +161
System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +128
</pre> </code>
</td>
</tr>
</table>
<br>
<hr width=100% size=1 color=silver>
<b>Informacje o wersji:</b> Wersja Microsoft .NET Framework:4.0.30319; Wersja ASP.NET:4.8.3815.0
</font>
</body>
</html>
<!--
[InvalidOperationException]: Nie można odnaleźć typu „WcfService1.Service1” dostarczonego jako wartość atrybutu Service w dyrektywie ServiceHost lub w elemencie konfiguracji system.serviceModel/serviceHostingEnvironment/serviceActivations.
w System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)
w System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
w System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity)
w System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
[ServiceActivationException]: Nie można aktywować usługi „/Service1.svc”, ponieważ wystąpił wyjątek podczas kompilacji. Komunikat dotyczący wyjątku: Nie można odnaleźć typu „WcfService1.Service1” dostarczonego jako wartość atrybutu Service w dyrektywie ServiceHost lub w elemencie konfiguracji system.serviceModel/serviceHostingEnvironment/serviceActivations..
w System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
w System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result)
w System.ServiceModel.Activation.ServiceHttpHandlerFactory.ServiceHttpHandler.EndProcessRequest(IAsyncResult result)
w System.Web.HttpApplication.CallHandlerExecutionStep.InvokeEndHandler(IAsyncResult ar)
w System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result)
w System.ServiceModel.Activation.ServiceHttpHandlerFactory.ServiceHttpHandler.EndProcessRequest(IAsyncResult result)
w System.Web.HttpApplication.CallHandlerExecutionStep.InvokeEndHandler(IAsyncResult ar)
w System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar)
-->
--.
Metadane zawierają odwołanie, którego nie można rozpoznać: „http://localhost:49823/Service1.svc”.
Nie można aktywować żądanej usługi „http://localhost:49823/Service1.svc”. Więcej informacji można znaleźć w dziennikach śledzenia serwera.
Jeśli usługa została zdefiniowana w bieżącym rozwiązaniu, spróbuj skompilować rozwiązanie i dodać ponownie odwołanie do usługi.
Wszystko byłoby zrozumiałe, gdyby nie to, że wcześniej na testowym pustym projekcie wszystko śmiagało, a teraz nie mogę tego zrobić.