современные средства разработки crm в сочетании с WCF не работают - PullRequest
0 голосов
/ 29 февраля 2012

Я создал простой сервис wcf, который извлекает данные из crm 4.0 с использованием передовых инструментов разработчика. Я успешно запросил данные, используя linq. Классы были созданы с использованием crmsvcutil. Однако, когда я преобразовал это в службу wcf, как показано ниже, она продолжает падать.

namespace CRMDataRetrieval
 {    
 [ServiceContract]
public interface ICRMData
{
    [OperationContract]
    string getValue();

}

public class CRMDataService : ICRMData
{
    public string getValue()
    {
        DataContext context = new DataContext("entities");  //entities is name of    classes that were generated by crmsvcutil

        string name = null;
        var query = from n in context.contacts
                    where n.acctNum == "01218515"
                    select n.nickname;
        foreach (var result in query)
            name = result;
        return name;
    }

На узле службы WCF служба остановлена, но также показывает Entities.CmsDataService как остановленную. Когда я нажимаю на это, дополнительная информация говорит о том, что служба (Entities.CmsDataService) не может быть запущена. Эта служба не имеет определенной конечной точки. Пожалуйста, добавьте хотя бы одну конечную точку для службы в конфигурационный файл и попробуйте снова.

В моем нынешнем состоянии app.config выглядит следующим образом. Так как и где мне добавить конечные точки в файле конфигурации для автоматически сгенерированных классов, чтобы они хорошо работали с WCF ? или мне нужно будет внести какие-либо другие изменения? Пожалуйста, уточните в вашем объяснении . Как обычно, заранее благодарю.

    <?xml version="1.0"?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="entities" connectionString="Authentication Type=ad; Server=http://****; User ID=*\*******; Password=*******"/>
  </connectionStrings>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <bindings />
    <client />
    <services>
      <service name="CRMDataRetrieval.CRMDataService">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:7432/account"/>
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint name="wsHttpBinding_ICRMData" address="ws" binding="wsHttpBinding" contract="CRMDataRetrieval.ICRMData"/>


        <!-- Metadata Endpoints -->
        <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --> 
        <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>

      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>

<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Посмотрите на параметры crmsvcutil .Существуют / dataContextPrefix и / dataContextClassName.Используйте эти параметры, чтобы установить правильное имя для сгенерированного контекста данных.Используйте сгенерированный контекст, как описано здесь

CrmConnection crmc = CrmConnection.Parse("Authentication Type=Passport; Server=https://" + org + ".crm.dynamics.com/" + org + "; User ID=myuser; Password=mypassword; Device ID=mydeviceid; Device Password=mydevicepassword");
var yourDataContext = new GeneratedDataContext(crmc);

К сожалению, у меня не установлена ​​CRM 4.0.Но я могу предоставить код для CRM 2011:

namespace CRMDataRetrieval
{
    public class CRMDataService : ICRMData
    {
        public string getValue()
        {
            var connection = CrmConnection.Parse("Url=https://orgname.crm.dynamics.com; Username=OpenId; Password=; DeviceID=####; DevicePassword=####");
            var service = new OrganizationService(connection);
            MyServiceContext context = new MyServiceContext(service);

            string name = null;
            var query = from n in context.ContactSet
                        where n.ContactId == new Guid("00000000-0000-0000-0000-000000000000")
                        select n.FullName;
            foreach (var result in query)
                name = result;

            return name;
        }
    }
}

Я использовал предоставленную вами конфигурацию конечной точки.

Для генерации классов я использовал

crmsvcutil.exe /url:https://orgname.crm.dynamics.com/XRMServices/2011/Organization.svc /out:GeneratedCode.cs /n:MyCrmNamespace /u:"OpenId" /p:"####" /serviceContextName:MyServiceContext /di:#### /dp:####
0 голосов
/ 29 февраля 2012

Можете ли вы вызвать конечную точку Hello World и потреблять ее? Получив это, вы можете использовать рабочий код, который вы уже написали. (разве что crmsvcutil генерирует некоторые классы, предназначенные для размещения конечной точки wcf, о которой я не знаю?)

Я согласен с paramosh - Entities.CmsDataService - это не название службы, которую я ожидал бы, учитывая ваш пример. Я ожидал бы 'CRMDataRetrieval.CRMDataService'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...