Как динамически вызывать службу WCF с помощью С# Winforms?

У меня есть служба WCF, и я хочу вызвать ее во время выполнения...

если я делаю тот же код и вместо WCF (.svc), если я вызываю (.asmx), я могу пройти и получить результаты... но здесь WCF терпит неудачу

 private void button1_Click(object sender, EventArgs e)
    {
        string WebserviceUrl = "http://localhost:90/service1/service1.svc";
        string serviceName = Service1;
        string methodName = GetData;
        string[] arArguments = new string[2];
        arArguments[0] = 2 ;
        string sData =CallWebService(WebserviceUrl, serviceName, methodName, arArguments);
        if (!string.IsNullOrEmpty(sData))
            MessageBox.Show(sData + "\tData Available");
        else
            MessageBox.Show(sData + "\tData not Available");
    }
    [SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
    private string CallWebService(string WebserviceUrl, string serviceName, string methodName, string[] arArguments)
    {
        System.Net.WebClient client = new System.Net.WebClient();
        System.IO.Stream stream = client.OpenRead(WebserviceUrl + "?wsdl");
        ServiceDescription description = ServiceDescription.Read(stream);
        ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
        importer.ProtocolName = "Soap12";
        importer.AddServiceDescription(description, null, null);
        importer.Style = ServiceDescriptionImportStyle.Client;
        importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
        CodeNamespace nmspace = new CodeNamespace();
        CodeCompileUnit unit1 = new CodeCompileUnit();
        unit1.Namespaces.Add(nmspace);
        ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);
        if (warning == 0) // If Successfull
        {
            CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");
            string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };
            CompilerParameters parms = new CompilerParameters(assemblyReferences);
            CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);
            if (results.Errors.Count > 0) // Error Part
            {
                foreach (CompilerError oops in results.Errors)
                {
                    System.Diagnostics.Debug.WriteLine("========Compiler error============");
                    System.Diagnostics.Debug.WriteLine(oops.ErrorText);

                }
                throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
            }
            object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);
            MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);
            return mi.Name;
        }
        else
        {
            return null;
        }
    }

как этого добиться.....


person Aravindan Srinivasan    schedule 09.07.2013    source источник
comment
Какую ошибку вы получаете   -  person BlackICE    schedule 09.07.2013
comment
если (предупреждение == 0) здесь предупреждение приходит как NoCodeGenerated ,... !!! но в случае службы .Asmx работает нормально ..!!!!   -  person Aravindan Srinivasan    schedule 09.07.2013
comment
То, что вы делаете, подходит для служб .asmx, но не для служб WCF. Как ServiceDescriptionImporter работает для .asmx (устаревшие веб-сервисы). ServiceContractGenerator работает со службами WCF (.svc). Точно так же использование класса ServiceDescription используется в части dll System.Web.Services. В то время как для служб WCF этот класс определен в dll System.ServiceModel.   -  person vibhu    schedule 09.07.2013
comment
проверьте этот пост - stackoverflow.com/questions/7360975/   -  person vibhu    schedule 10.07.2013