Quantcast
Viewing all articles
Browse latest Browse all 175888

RE: IIS hosted Web service using an AX wcf service: The Target principle name is incorrect

I'm not certain which part of the code you want to see, but here's the method that is called by the service operation from my last round of testing:


I ran this through the debugger and it does enter into this method runs to the point where it makes the call to the AX service (as noted in the comments) which throws the exception it then goes into the catch segment where it fills the response with the error message that is then display in the client.

It is when this service attempts to use the AX service that the exception is thrown.

Again, everything is hosted on the same box.

        public GetCreditLimitAndBalanceDetailsResponse GetCreditLimitAndBalanceDetails(GetCreditLimitAndBalanceDetailsRequest request)
        {
            GetCreditLimitAndBalanceDetailsResponse response = new GetCreditLimitAndBalanceDetailsResponse();
            AxCreditLimitService.DLMGetCreditLimitBalanceDetailsRequest axRequest = new AxCreditLimitService.DLMGetCreditLimitBalanceDetailsRequest();
            // AX service parameters.
            axRequest.request = new AxCreditLimitService.DLMCreditLimitAndBalanceRequest();
            axRequest.securitySOAPHeader = new AxCreditLimitService.DLMSecuritySOAPHeader();

            axRequest.securitySOAPHeader.userName = request.SecuritySOAPHeader.UserName;
            axRequest.securitySOAPHeader.password = request.SecuritySOAPHeader.Password;
            axRequest.securitySOAPHeader.AnyAttr = request.SecuritySOAPHeader.AnyAttr;

            axRequest.request.accLedger = request.request.AccLedger;
            axRequest.request.balanceOverdueAgingOption = request.request.BalanceOverdueAgingOption;
            axRequest.request.companyCode = request.request.CompanyCode;
            axRequest.request.orgCode = request.request.OrgCode;
            axRequest.request.overdueAgingPeriod = request.request.OverdueAgingPeriod;


            try
            {
                // Create a client to AX service
                AxCreditLimitService.AxCreditLimitServiceClient AxCreditLimitClient = new AxCreditLimitService.AxCreditLimitServiceClient();
                AxCreditLimitService.CallContext callContext = new AxCreditLimitService.CallContext();
                // Call context added for testing had no effect, no longer used.
                callContext.LogonAsUser = "DAX_DEV_INSTALL@delmar-group.com";

                // Call to AX service through the client throws exception
                AxCreditLimitService.DLMGetCreditLimitBalanceDetailsResponse axResponse = AxCreditLimitClient.GetCreditLimitAndBalanceDetails(null, axRequest);
                response.GetCreditLimitAndBalanceDetailsResult = new CreditLimitAndBalanceResponse();

                response.GetCreditLimitAndBalanceDetailsResult.Succeeded = axResponse.GetCreditLimitAndBalanceDetailsResult.succeeded;
                response.GetCreditLimitAndBalanceDetailsResult.ErrorMessage = axResponse.GetCreditLimitAndBalanceDetailsResult.errorMessage;

                if (axResponse.GetCreditLimitAndBalanceDetailsResult.succeeded)
                {
                    List<CreditLimitAndBalanceInfo> responseDetails = new List<CreditLimitAndBalanceInfo>();
                    foreach (AxCreditLimitService.DLMCreditLimitAndBalanceInfo axResponseDetail in axResponse.GetCreditLimitAndBalanceDetailsResult.creditLimitAndBalanceDetails)
                    {
                        CreditLimitAndBalanceInfo responseDetail = new CreditLimitAndBalanceInfo();

                        responseDetail.AccLedger = axResponseDetail.accLedger;
                        responseDetail.AccountBalanceNotOverdue = axResponseDetail.accountBalanceNotOverdueField;
                        responseDetail.AccountBalanceNotOverdueHasValue = axResponseDetail.accountBalanceNotOverdueHasValue;
                        responseDetail.AccountBalanceOverdueLessThanOnePeriod = axResponseDetail.accountBalanceOverdueLessThanOnePeriod;
                        responseDetail.AccountBalanceOverdueLessThanOnePeriodHasValue = axResponseDetail.acctBalanceDueLessThanOnePeriodHasValue;
                        responseDetail.AccountBalanceOverdueOnePeriodAndOver = axResponseDetail.accountBalanceOverdueOnePeriodAndOver;
                        responseDetail.AccountBalanceOverdueOnePeriodAndOverHasValue = axResponseDetail.acctBalanceDueOnePeriodAndOverHasValue;
                        responseDetail.AccountBalanceOverdueTwoPeriodsAndOver = axResponseDetail.accountBalanceOverdueTwoPeriodsAndOver;
                        responseDetail.AccountBalanceOverdueTwoPeriodsAndOverHasValue = axResponseDetail.acctBalanceDueTwoPeriodsAndOverHasValue;
                        responseDetail.AccountBalanceOverdueThreePeriodsAndOver = axResponseDetail.accountBalanceOverdueThreePeriodsAndOver;
                        responseDetail.AccountBalanceOverdueThreePeriodsAndOverHasValue = axResponseDetail.acctBalanceDueThreePeriodsOverHasValue;
                        responseDetail.AccountBalanceTotal = axResponseDetail.accountBalanceTotal;
                        responseDetail.AccountBalanceTotalHasValue = axResponseDetail.accountBalanceTotalHasValue;
                        responseDetail.BalanceOverdueAgingOption = axResponseDetail.balanceOverdueAgingOption;
                        responseDetail.CompanyCode = axResponseDetail.companyCode;
                        responseDetail.CreditLimit = axResponseDetail.creditLimit;
                        responseDetail.CreditLimitHasValue = axResponseDetail.creditLimitHasValue;
                        responseDetail.CurrencyCode = axResponseDetail.currencyCode;
                        responseDetail.ExternalCreditorCode = axResponseDetail.externalCreditorCode;
                        responseDetail.ExternalDebtorCode = axResponseDetail.externalDebtorCode;
                        responseDetail.IsOverCreditLimit = axResponseDetail.isOverCreditLimit;
                        responseDetail.IsOverCreditLimitHasValue = axResponseDetail.isOverCreditLimitHasValue;
                        responseDetail.IsOverCreditTerms = axResponseDetail.isOverCreditTerms;
                        responseDetail.IsOverCreditTermsHasValue = axResponseDetail.isOverCreditTermsHasValue;
                        responseDetail.LegacySystemCode = axResponseDetail.legacySystemCode;
                        responseDetail.OnCreditHold = axResponseDetail.onCreditHold;
                        responseDetail.OnCreditHoldHasValue = axResponseDetail.onCreditHoldHasValue;
                        responseDetail.OrgCode = axResponseDetail.orgCode;
                        responseDetail.OverdueAgingPeriod = axResponseDetail.overdueAgingPeriod;
                        responseDetail.OverdueTotal = axResponseDetail.overdueTotal;
                        responseDetail.OverdueTotalHasValue = axResponseDetail.overdueTotalHasValue;
                        responseDetail.SettlementGroupExternalCreditorCode = axResponseDetail.settlementGroupExternalCreditorCode;
                        responseDetail.SettlementGroupExternalDebtorCode = axResponseDetail.settlementGroupExternalDebtorCode;
                        responseDetail.SettlementGroupLegacySystemCode = axResponseDetail.settlementGroupLegacySystemCode;
                        responseDetail.SettlementGroupOrgCode = axResponseDetail.settlementGroupOrgCode;
                        responseDetail.UnpostedRevenueRecognisedTotal = axResponseDetail.unpostedRevenueRecognisedTotal;
                        responseDetail.UnpostedRevenueRecognisedTotalHasValue = axResponseDetail.unpostedRevenueRecognisedTotalHasValue;
                        responseDetail.UnpostedRevenueUnrecognisedTotal = axResponseDetail.unpostedRevenueUnrecognisedTotal;
                        responseDetail.UnpostedRevenueUnrecognisedTotalHasValue = axResponseDetail.unpostedRevenueUnrecognisedTotalHasValue;
                        responseDetails.Add(responseDetail);
                    }
                    response.GetCreditLimitAndBalanceDetailsResult.CreditLimitAndBalanceDetails = responseDetails.ToArray();
                }
            }
            catch (Exception e)
            {
                // Catchs SSPI exception this adds the exception message to response
                response.GetCreditLimitAndBalanceDetailsResult = new CreditLimitAndBalanceResponse();
                response.GetCreditLimitAndBalanceDetailsResult.Succeeded = false;
                response.GetCreditLimitAndBalanceDetailsResult.ErrorMessage = "An exception has occured: " + e.InnerException.InnerException.Message;

                List<CreditLimitAndBalanceInfo> responseDetails = new List<CreditLimitAndBalanceInfo>();
                CreditLimitAndBalanceInfo responseDetail = new CreditLimitAndBalanceInfo();

                responseDetails.Add(responseDetail);

                response.GetCreditLimitAndBalanceDetailsResult.CreditLimitAndBalanceDetails = responseDetails.ToArray();
            }

            return response; // returns response to client
        }


And here is the web.config for the service:

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

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_AxCreditLimitService" closeTimeout="00:01:00" />
      </netTcpBinding>
      <basicHttpBinding>
        <binding name="CreditLimitServiceSoap" />
      </basicHttpBinding>
      <customBinding>
        <binding name="CreditLimitServiceSoap12" closeTimeout="00:02:00">
          <textMessageEncoding messageVersion="Soap12" />
        </binding>
      </customBinding>
    </bindings>
    <diagnostics>
      <messageLogging logEntireMessage="true" />
      <endToEndTracing activityTracing="true" />
    </diagnostics>
    <services>
      <service name="DLMCreditLimitService.CreditLimitService">
        <endpoint address="localhost/.../CreditLimitService.svc"
            binding="basicHttpBinding" bindingConfiguration="" name="CreditLimitServiceSoap"
            contract="Delmar.services.finance.CreditLimitServiceSoap">
          <identity>
            <userPrincipalName value="{Hidden: BC Proxy user}" /> <!-- Does not appear to have any effect -->
            <servicePrincipalName value="{Hidden: AOS user}"/> <!-- Does not appear to have any effect -->
          </identity>
        </endpoint>
      </service>
      </services>
    <client>
      <endpoint address="net.tcp://localhost:8201/DynamicsAx/Services/DLMCreditLimitServiceGroup"
        binding="netTcpBinding" bindingConfiguration="NetTcpBinding_AxCreditLimitService"
        contract="AxCreditLimitService.AxCreditLimitService" name="NetTcpBinding_AxCreditLimitService">
        <identity>
          <userPrincipalName value="{Hidden: BC Proxy user}" /> <!-- Required does not log into AX otherwise -->
          <servicePrincipalName value="{Hidden: AOS user}"/>
        </identity>
      </endpoint>
    </client>
    <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="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
<!--    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> -->
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  
</configuration>



Viewing all articles
Browse latest Browse all 175888

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>