2009-11-18 10 views

Respuesta

0

WCF is not dot net. Para crear una aplicación WCF que tiene que hacer cuatro cosas

  1. Definir un contrato de servicio
  2. Implementar el contrato en el lado del servidor
  3. Anfitrión su servicio implementado
  4. crear un cliente que también se puede utilizar el servicio contrato

echar un vistazo a este tutorial

Thi s es un ejemplo completo de un servicio y su huésped

using System.ServiceModel; 
using System.ServiceModel.Description; 
using System.Runtime.Serialization; 
using System; 

[ServiceContract] 
public interface AddStuff 
{ 
    [OperationContract] 
    int Add(int X,int Y); 
} 

public class opAddStuff : AddStuff 
{ 
    public int Add(int X, int Y) 
    { 
     return X + Y; 
    } 
} 

public class Pgm 
{ 
    static void Main(string[] args) 
    { 
     string httpAddr = "http://127.0.0.1:6001/AddStuff"; 
     string netAddr= "net.tcp://127.0.0.1:5001/AddStuff"; 

     System.ServiceModel.ServiceHost SH = new ServiceHost(typeof(opAddStuff),new Uri(httpAddr)); 

     BasicHttpBinding B = new BasicHttpBinding(); 
     NetTcpBinding NB = new NetTcpBinding(); 

     SH.AddServiceEndpoint(typeof(AddStuff), B, httpAddr); 
     SH.AddServiceEndpoint(typeof(AddStuff), NB, netAddr); 



     System.ServiceModel.Description.ServiceMetadataBehavior smb = SH.Description.Behaviors.Find<ServiceMetadataBehavior>(); 
     // If not, add one 
     if (smb == null) 
      smb = new ServiceMetadataBehavior(); 

     smb.HttpGetEnabled = true; 
     smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 

     SH.Description.Behaviors.Add(smb); 
     SH.AddServiceEndpoint( ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex"); 

     SH.Open(); 

     Console.WriteLine("Service at your service"); 
     string crap = Console.ReadLine(); 



    } 
} 

También tiene que ejecutar este comando

http netsh añadir url urlacl = http://+:6001/AddStuff user = dominio \ usuario

algo de esto proviene de here

+0

He creado el contrato de servicio. Implementado. Tengo un problema en el punto de host. Cuando crea una aplicación WCF, lo hace por usted. Me gustaría modificar una aplicación de biblioteca de clases para hacer eso. –

+0

Aún está iniciando un exe para el servicio y creando una instancia del servicio. Ese es mi problema. Necesito que Visual Studio lo descubra como lo hace en una biblioteca de servicios de WCF. –

12

he descubierto lo siguiente haciendo lo contrario a lo que usted está tratando de lograr, es decir, el cambio de una biblioteca servicio a una aplicación de consola ..

algunas de las configuraciones en los archivos csproj no se pueden editar desde la pantalla de configuración desde VS para convertir una biblioteca de clases en una biblioteca de servicios WCF. Debe agregar lo siguiente a su archivo de proyecto

Agregue lo siguiente a la primera PropertyGroup [estos son los GUID para un proyecto de C# WCF]

<ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 

ver aquí para más información sobre ProjectTypeGuids

también puede ser necesario añadir la siguiente línea inmediatamente a continuación:

<StartArguments>/client:"WcfTestClient.exe"</StartArguments> 

Pero en última instancia son los PropertyTypeGuids los que debe insertar manualmente para que VS reconozca el proyecto como un Proyecto de Biblioteca de Servicios WCF.

1

Esto es lo que tuve que hacer para convertir mi biblioteca de clase a la aplicación WCF REST.

1) Modifique el archivo .csproj y agregue las dos líneas siguientes al primer elemento PropertyGroup en el archivo .csproj.

<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> 
<UseIISExpress>false</UseIISExpress> 

2) Añadir la siguiente línea a continuación <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> a la importación de archivos Microsoft.WebApplication.targets

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> 

3) Agregue el código siguiente al final del archivo antes de la etiqueta </Project>.

<ProjectExtensions> 
<VisualStudio> 
    <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> 
    <WebProjectProperties> 
     <UseIIS>False</UseIIS> 
     <AutoAssignPort>True</AutoAssignPort> 
     <DevelopmentServerPort>50178</DevelopmentServerPort> 
     <DevelopmentServerVPath>/</DevelopmentServerVPath> 
     <IISUrl> 
     </IISUrl> 
     <NTLMAuthentication>False</NTLMAuthentication> 
     <UseCustomServer>False</UseCustomServer> 
     <CustomServerUrl> 
     </CustomServerUrl> 
     <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> 
    </WebProjectProperties> 
    </FlavorProperties> 
</VisualStudio> 

4) Guarde el archivo .csproj y cargar el proyecto.

5) Agregue un archivo Web.Config al proyecto y agregue el siguiente código mínimo. Puede agregar más más tarde según su requisito.

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </modules> 
    </system.webServer> 

    <system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <standardEndpoints> 
     <webHttpEndpoint> 
     <!-- 
      Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
      via the attributes on the <standardEndpoint> element below 
     --> 
     <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/> 
     </webHttpEndpoint> 
    </standardEndpoints> 
    </system.serviceModel> 

</configuration> 

6) Agregue un archivo Global.asax. A continuación hay un archivo de muestra.

public class Global : HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(); 
    } 

    private void RegisterRoutes() 
    { 
     // Edit the base address of Service1 by replacing the "Service1" string below 
     RouteTable.Routes.Add(new ServiceRoute("YourService", new WebServiceHostFactory(), typeof(YourServiceClass))); 
    } 
} 

7) Por último, en las propiedades del proyecto, bajo pestaña Generar, si la ruta de salida se establece en bin\Debug modificarlo para bin\.

Cuestiones relacionadas