WCF 웹 서비스를 처음 사용하는 것으로 시작하여 지난 3 일 동안 오류를 저지른 것으로 시작하겠습니다. 이러한 문제는 Stackoverflow에서 여러 번 답변을 받았지만 대부분의 솔루션을 시도했지만 아직 성공하지 못했습니다. 따라서 올바른 방법을 찾는 데 도움이 필요합니다.WCF 웹 서비스 연결 문제
이제 일부 배경. 저는 ASP.Net MVC 5 프로젝트를 만들고 있는데, 저는 Epicor (ERP 솔루션)에서 제공하는 WCF 웹 서비스에 연결해야합니다. 내 프로젝트 인 ERP와 웹 서비스는 모두 내부 IIS 인스턴스에서 호스팅됩니다. 서비스는 BasicHTTP 및 NetTCP 프로토콜을 사용하여 노출됩니다. 웹 서비스 및 ERP가 호스팅되는 응용 프로그램 풀은 ID를 사용합니다. 웹 서비스의 하나가 Company.svc이라고하며이 같이 노출 :
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_CompanySvcContract" />
</basicHttpBinding>
<customBinding>
<binding name="CustomBinding_CompanySvcContract">
<security defaultAlgorithmSuite="Default" authenticationMode="UserNameOverTransport"
requireDerivedKeys="true" includeTimestamp="true" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localClientSettings detectReplays="false" />
<localServiceSettings detectReplays="false" />
</security>
<textMessageEncoding />
<windowsStreamSecurity />
<tcpTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://pilotserver/ERP100700/Ice/BO/Company.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_CompanySvcContract"
contract="CompanyService.CompanySvcContract" name="BasicHttpBinding_CompanySvcContract" />
<endpoint address="net.tcp://pilotserver/ERP100700/Ice/BO/Company.svc"
binding="customBinding" bindingConfiguration="CustomBinding_CompanySvcContract"
contract="CompanyService.CompanySvcContract" name="CustomBinding_CompanySvcContract">
<identity>
<userPrincipalName value="pilotserver\Administrator" />
</identity>
</endpoint>
</client>
그리고 나 ': 내 프로젝트에서
<wsdl:service name="CompanySvcFacade">
<wsdl:port name="BasicHttpBinding_CompanySvcContract" binding="tns:BasicHttpBinding_CompanySvcContract">
<soap:address location="http://pilotserver/ERP100700/Ice/BO/Company.svc"/>
</wsdl:port>
<wsdl:port name="CustomBinding_CompanySvcContract" binding="tns:CustomBinding_CompanySvcContract">
<soap12:address location="net.tcp://pilotserver/ERP100700/Ice/BO/Company.svc"/>
<wsa10:EndpointReference>
<wsa10:Address>net.tcp://pilotserver/ERP100700/Ice/BO/Company.svc</wsa10:Address>
<Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
<Upn>pilotserver\Administrator</Upn>
</Identity>
</wsa10:EndpointReference>
</wsdl:port>
</wsdl:service>
, 내 Web.config의 다음과 같은있다 다음 코드를 사용하여 클라이언트의 웹 서비스를 사용하려고합니다 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using EpicorTestApp.CompanyService;
using NLog;
namespace EpicorTestApp.Controllers
{
public class HomeController : Controller
{
CompanySvcContractClient CompanyService = new CompanySvcContractClient("CustomBinding_CompanySvcContract");
//CompanySvcContractClient CompanyService = new CompanySvcContractClient("BasicHttpBinding_CompanySvcContract");
private Logger logger = LogManager.GetCurrentClassLogger();
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
bool morePages = false;
CompanyService.ClientCredentials.UserName.UserName = "Administrator";
CompanyService.ClientCredentials.UserName.UserName = "myPassword";
CompanyListTableset companyList = CompanyService.GetList("", 0, 0, out morePages);
CompanyListTable companies = companyList.CompanyList;
foreach (CompanyListRow companyListRow in companies)
{
logger.Info("Company: " + companyListRow.Company);
}
return View();
}
}
}
클라이언트 b inding, 나는 BasicHttp와 NetTCP (CustomBinding과 같은)를 시도했는데, 둘 다 약간의 에러가 발생했다.
이 구성을 실행시
, 내가 거부 액세스 "에 대한 오류가 예외 정보를 : 나는 BasicHttp 바인딩을 작성하면, 다음과 같은 서비스 참조 구성을 사용합니다. System.ServiceModel.Security.SecurityAccessDeniedException을 : 접근이 금지되어있다."내가 서비스 참조를 만들려고 할 때, 바인딩 nettcp에 대한
, 나는 URI 접두사가 인식되지 않는 메시지 "로 오류가 발생 메타 데이터는 확인할 수없는 참조가 포함되어 있습니다. net.tcp를 :. //localhost/ERP100700/Ice/BO/Company.svc는 '나는 URL에 모두 로컬 호스트와 pilotserver 사용하려고했습니다내가 디버그 모드에서 응용 프로그램을 모두 (실행 시도했습니다. ISS-Express)를 IIS에 게시하고 동일한 결과를 얻을 수 있습니다. 내가 잘못하고 있으며 어떻게해야합니까? 이 문제를 해결 하시겠습니까? HomeController
에서
그물을 생성하는 것이 까다로울 수 있습니다.tcp 클라이언트 코드와 계약서. 로컬 PC에 있기 때문에 인터페이스 계약 및 종속 데이터 계약을 클라이언트 응용 프로그램에 복사하고 ChannelFactory를 사용하여 net.tcp 프록시를 만듭니다. BasicHttp에 관해서는, 당신은 그 요청을 캡쳐하고 어떤 종류의 정보가 당신이 권한이 없다는 것을 말하고있는 서비스에 전달되는지를 볼 필요가 있습니다. Fiddler, WCF Tracing을 사용하거나 Wireshark를 사용해도 좋습니다. –
내가 언급 한 것들 중 일부는 당신이 기본을 알고 있다고 가정하고, 나는 그들에 대해 설명하지 않을 것이다. 거기에는 많은 구글 튜토리얼과 문서가있다. –
참고로, 'net.tcp' 프로토콜을 사용하여 서비스 참조를 추가 할 수 없습니다.'http'를 통해 서비스 참조를 할 수 있습니다. 서비스 설정이'net.tcp' 엔드 포인트를 적절하게 노출하는 한'http'에서 가져온 WSDL을 기반으로 사용할 수 있어야합니다. 'net.tcp'에 두 번째 참조를 추가 할 필요가 없습니다. –