Получение ошибки при доступе к веб-сервису - PullRequest
0 голосов
/ 07 марта 2012

Я работаю над одним консольным приложением и использую веб-службу, но получаю сообщение об ошибке при доступе к этой службе:

Клиент обнаружил тип содержимого ответа 'text / html; charset = utf-8 ', но ожидаемый' text / xml '. Запрос не выполнен с сообщением об ошибке:

<code>--
<html>
    <head>
        <title>Runtime Error</title>
        <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:"Lucida Console";font-size: .9em}
         .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:hand; }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>

            <h2> <i>Runtime Error</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> Description: </b>An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.
            <br><br>

            <b>Details:</b> To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

Примечания: Текущая страница ошибки, которую вы видите, может быть заменена настраиваемой страницей ошибок, изменив атрибут defaultRedirect тега конфигурации приложения, чтобы он указывал на URL страницы настраиваемой ошибки.

<!-- Web.Config Configuration File --> <configuration> <system.web> <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/> </system.web> </configuration>

Это мой код:

namespace ConsoleWebService
{
    class MainDataService
    {
        static void Main(string[] args)
        {
            Console.WriteLine("New Account GUID="+CreateAccount("GTLDEV","New Account1"));
            Console.ReadKey();
        }

        private static string CreateAccount(string organizationName, string accountName)
        {
            try
            {

                CrmSdk.CrmService myCrm = new CrmSdk.CrmService();
                myCrm.Url = GetCrmServiceForOrganization(organizationName);
                CrmSdk.CrmAuthenticationToken myToken = new CrmSdk.CrmAuthenticationToken();
                myToken.AuthenticationType = 0;
                myToken.OrganizationName = organizationName;
                myCrm.CrmAuthenticationTokenValue = myToken;
                myCrm.Credentials = System.Net.CredentialCache.DefaultCredentials;


                CrmSdk.account newAccount = new CrmSdk.account();

                newAccount.name = accountName;
                newAccount.address1_country = "India";
                newAccount.address1_city = "Mumbai";

                CrmSdk.Lookup objLookup=new CrmSdk.Lookup();
                objLookup.type= "account";
                objLookup.Value= new Guid("A8A58DB6-5364-E111-9493-00E04C39161E");

                newAccount.parentaccountid = objLookup;
                CrmSdk.Lookup objLookup1 = new CrmSdk.Lookup();
                objLookup1.type = "contact";
                objLookup1.Value = new Guid("1EDE79DD-FC5D-E111-9493-00E04C39161E");

                newAccount.primarycontactid = objLookup1;
                CrmSdk.Picklist pl = new CrmSdk.Picklist();
                pl.name = "address1_addresstypecode";
                pl.Value = 1;
                newAccount.address1_addresstypecode = pl;



                Guid newAccountId = myCrm.Create(newAccount);
                return newAccountId.ToString();
            }
            catch (System.Web.Services.Protocols.SoapException soapEx)
            {
                Console.WriteLine("SOAP exception: " + soapEx.Detail.InnerText + " " + soapEx.ToString());
                return soapEx.Detail.InnerText + "  " + soapEx.ToString();
            }
            catch (Exception ex)
            {
                Console.WriteLine("General exception: " + ex.ToString());
                return "General exception: " + ex.ToString();
            }

        }
        private static string GetCrmServiceForOrganization(string organizationName)
        {
            string urlResult = "";
            CrmSdk.Discovery.CrmDiscoveryService myCrm = new CrmSdk.Discovery.CrmDiscoveryService();

            //myCrm.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            System.Net.CredentialCache.DefaultNetworkCredentials.UserName = "kartik.patel";
            System.Net.CredentialCache.DefaultNetworkCredentials.Domain = "server";
            System.Net.CredentialCache.DefaultNetworkCredentials.Password = "gtl12@";
            myCrm.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            CrmSdk.Discovery.RetrieveOrganizationsRequest myRequest = new CrmSdk.Discovery.RetrieveOrganizationsRequest();

            CrmSdk.Discovery.RetrieveOrganizationsResponse myResponse = (CrmSdk.Discovery.RetrieveOrganizationsResponse)myCrm.Execute(myRequest);
            foreach (CrmSdk.Discovery.OrganizationDetail tDetail in myResponse.OrganizationDetails)
            {
                Console.WriteLine("Organization = " + tDetail.OrganizationName);
                if (String.Compare(tDetail.OrganizationName, organizationName, true) == 0)
                {
                    return tDetail.CrmServiceUrl;
                }
            }
            return urlResult;

        }

    }
}
...