7월, 2013의 게시물 표시

WCF IIS HTTP Error 500.19 - Internal Server Error Code 0x80070032

이미지
Server Error
Internet Information Services 7.0

Error Summary
HTTP Error 500.19 - Internal Server Error

The requested page cannot be accessed because the related configuration data for the page is invalid.

Detailed Error Information

Module IIS Web Core
Notification BeginRequest
Handler Not yet determined
Error Code 0x80070032
Config Error The configuration section 'protocolMapping' cannot be read because it is missing a section declaration
Config File \\?\D:\WCFTest\WCFServiceTest\web.config

Requested URL http://localhost:80/WCFServiceTest
Physical Path D:\WCFTest\WCFServiceTest
Logon Method Not yet determined
Logon User Not yet determined

Config Source
   10:   </system.web>
   11:   <system.serviceModel>
   12:     <behaviors>

Links and More Information
This error occurs when there is a problem reading the configuration file for the Web server or Web application. In some cases, the event logs may contain more information about what caused this error.
View more…

Unity3D 태국 폰트 첨자가 글자 중간에 붙어서 나올 때

이미지
기존에 유니티3D에서 태국어 폰트 렌더링 이슈를 정리했었습니다. 태국어가 유니티3D 툴 상에서는 Arial로도 잘 보이는데 디바이스에서 돌리면 안보이는 문제였죠. 그래서 태국에서 자주 쓴다는 tahoma 폰트로 대체해서 프로젝트 진행중이었는데 다른 이슈가 생겼습니다.

 태국어는 이렇게 생겼습니다. 중간의 본체부분 말고 위 아래로 첨자가 더 있네요. 결론부터 말하자면, 폰트를 바꿔주면 해결이 됩니다.

Free Thai Fonts

 위 사이트로가서 태국어 폰트를 받아서 진행하면 되는거죠. 저는 Garuda 폰트를 사용했습니다.

 유니티3D 툴상에서 Arial로 렌더링 화면입니다. 정상인 듯 하지만,

 이건 기존 tahoma 폰트구요. 역시 잘 되는 것 같지만,

 이건 새로받은 Garuda 폰트입니다. 차이점을 아시겠죠? 제가 봤을 때 위에것들도 읽는데 크게 문제 없을 것 같은데 뭐 해달라니까 해결해줘야죠.

 이외에도 기존 PC 게임 개발할 때 태국어 폰트 처리는 많은 이슈가 있었던것 같네요. 윈도우에서 개발할때는 유니스크라이브가 좋은 것 같네요.

태국어를 FreeType 라이브러리로 출력이 가능 한가요? - 게임코디태국어에서 한 문자 단위로 알 수 있는 방법은 무었입니까? - GPGSTUDY태국어 출력 관련 질문입니다. - GPGSTUDY

Unity3D Android UCGame SDK Integration - 3. Payment, UPointCharge

이미지
유니티3D 안드로이드에 중국 UCGame SDK 연동 초기화, 로그인 로그아웃 처리를 했었습니다. 이번에는 게임머니 결재부분과 U포인트 충전 처리를 정리합니다.


1. Payment

public void UCGamePayment_U(float fAmount) {
PaymentInfo pInfo = new PaymentInfo();
// 구매 요청 후 연속 충전 구매 가능 여부. 기본값 true
pInfo.setAllowContinuousPay(false);
// 충전 가능한 가격 == 0 이며 유저 마음대로 충전가능. != 0 이면 설정된 가격으로만 구매 가능.
pInfo.setAmount(fAmount);
// 충전 처리에 필요한 커스텀 충전 정보. 이 정보는 충전 처리 완료 후 UC 플랫폼에서 개발사 서버에 그대로 전달되는 값이다.
pInfo.setCustomInfo("custOrderId=PX299392#ip=111.22.333.44#...");

try {
// 충전 요청이 실패하면 아래의 callback은 실행되지 않고 아무런 메시지도 게임에 전달되지 않는다.
// 단지 충전 페이지에서 실패 정보를 출력해준다.
UCGameSDK.defaultSDK().pay(UnityPlayer.currentActivity
, pInfo, new UCCallbackListener<OrderInfo>() {

@Override
public void callback(int arg0, OrderInfo arg1) {
// TODO Auto-generated method stub
JSONObject jsonObj = new JSONObject();

switch(arg0) {
case UCGameSDKStatusCode.SUCCESS:
try {
// 오더 번호
jsonObj.put("orderId", arg1.getOrderId());
// 오더 가격
jsonObj.put("orderAmount", arg1.getOrderAmount());
// 충전 유형
js…

원격 데스크톱 연결 후 파일 복사하기

이미지
원격지(태국)에 접속해 제가 작업한 WCF 서비스 파일을 IIS로 띄우기 위해 파일을 복사하는 과정에서 어떻게 해야할지 몰라 잠시 난감하던차에 알아보니 간단하네요.

 원격 데스크톱을 실행 후 밑에 옵션 표시를 클릭합니다.

 일반 탭에서 접속할 컴퓨터 이름(ip)과 사용자 이름(계정)을 입력합니다.

 중요한건 로컬 리소스입니다. 밑에 클립보드를 체크한 상태로 연결합니다. 그러면 이제 복사(Ctrl+C) 붙여넣기(Ctrl+V)로 원격지에 파일을 복사할 수 있습니다.

 만약 위와같이 복사중에 Access is denied 에러가 발생하면 폴더를 하나 만들고 그 안에 복사를 해줍니다.

 이렇게 말이죠.

 윈도우7에서 접속할 때가 위와같고 윈도우XP라면 링크를 확인하시기 바랍니다.

Research Android APK Expansion Files(.OBB)

이미지
안드로이드 앱을 만들어 구글 플레이에 서비스할 때 APK용량은 최대 50mb로 제한됩니다. 그럼 50메가 넘어가는 앱은 어떻게 서비스를 해야할까요? 수단과 방법을 가리지않고 apk를 최적화해서 빌드 하는 방법도 있겠습니다. 또는 패치 시스템을 개발할 수도 있겠죠.

 전자는 저도 해보지 않아 모르겠지만 후자의 경우라면 cocos2d-x 기반 프로젝트시 curl을 이용해서 http나 ftp 프로토콜을 사용해 파일을 다운로드 할 수있습니다. 유니티3D 기반 프로젝트라면 에셋번들을 사용해서 나중에 패치로 적용할 파일을 관리하고 WWW 객체로 추가 다운로드하면 됩니다. 여기서 curl이나 에셋번들만 가지고는 단순히 파일을 받거나 패킹하는 것만 되는거고 그런 파일들을 버전관리까지 해주면서 최종 패치까지하는 패치 시스템은 직접 구현을 해줘야합니다.

 위의 전자와 후자 말고 다른 대안도 있습니다. iOS는 모르겠지만 안드로이드에서는 지금 리서치중인 APK Expansion Files는 OBB 파일을 사용해서 처리할 수 있다고합니다. 확장파일이라고도 부르는 것 같네요. 사실 현재 중국버전 준비하면서 후자인 패치 시스템을 개발한 상태입니다. 유니티3D 에셋 번들 패치시스템이요. 그런데 중국에서 다 해놨더니 구글의 확장파일로 해달라고 요구사항이 와서 이렇게 리서치중이네요.

 확장파일을 사용해서 기본적인 50MB 외에 최대 각각 2GB의 파일 2개를 사용할 수 있다고합니다. 2개중 한개는 기본 확장파일이고 나머지 다른 한개는 선택사항으로 패치 확장파일로 사용된다네요. 기본 확장파일에는 크게 패치할 내용이 아닌것들을 묶어주면 되겠고, 패치 확장파일에는 자주 패치가 이루어지는 파일을 묶어주면 되겠습니다.

 위에서도 말했지만 이런 일련의 과정들이 추가 비용없이 구글이 제공하는 api만 사용할 줄 알면 패치 서버나 따로 패치 시스템 구현이 없는 즉, 추가 비용없이 개발할 수 있게되는거죠. 파일 호스팅도 구글에서 제공하니까요.

 다음에는 유니티3D 안드로이드에 OBB를 적용하는 것을 …

Unity3D Android UCGame SDK Integration - 2. Init, Login, Logout

이미지
유니티3D 안드로이드 중국 UCGame SDK 준비작업을 정리해봤습니다. 이번에는 초기화와, 로그인, 로그아웃 처리를 정리하겠습니다.

 참고로 다른 중국 SDK 튜토리얼과 다르게 안드로이드 플러그인에서 결과값을 JSON으로 보내게 처리해놨습니다. 그래서 유니티3D에서 JSON 처리가 필요한데 LitJSON을 사용했으니 링크를 참고하세요.


1. Init

public class MainActivity extends UnityPlayerActivity {
// 운영사 ID
private final int UC_CPID = 11111;
// 게임 ID
private final int UC_GAMEID = 222222;
// 서버 ID
private final int UC_SERVERID = 0;

private final String LOG_TAG = "UC_GAME";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

public void UCGameInit_U(boolean bDebugMode) {
GameParamInfo gameParam = new GameParamInfo();
gameParam.setCpId(UC_CPID);
gameParam.setGameId(UC_GAMEID);
gameParam.setServerId(UC_SERVERID);

// 충전 히스토리 조회 기능 여부
boolean bPayHistory = true;
// 계정 교체 기능 여부
boolean bUserChange = true;
gameParam.setFeatureSwitch(new FeatureSwitch(bPayHistory, bUserChange));

// 계정 교체 기능이 가능하다면 SDK 초기화 전에 로그아웃 리스너를 설정해준다.
if(bUserChange == true) {
try {
LogoutListener();
} catch (UCCallbackListenerNullE…

Unity3D Android UCGame SDK Integration - 1. 준비작업

이미지
중국 GameNoll91 마켓Baidu Duoku에 이어 이번에는 UCGame SDK라는 것을 연동을 정리해보겠습니다. 이번이 마지막이길...


1. 유니티3D 안드로이드 플러그인 기본 작업

유니티3D 안드로이드 플러그인 프로젝트를 만듭니다. 역시나 패키지명에 uc가 포함되어야 합니다. 중국 SDK는 다 이런걸 요구하네요.


2. UCGame SDK 임포트


 압축해제 후 alipay_msp.jar, UCGameSDK2.3.4.jar 파일을 스샷과 같이 자바 빌드 패스 -> Libraries -> Add External JARs를 통해 가져옵니다.


3. AndroidManifest.xml 수정

    <!-- UCGame SDK -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"…

91 마켓 플랫폼 SDK와 바이두 Duoku SDK 통합시 충돌사항

이미지
The method dkLogin(Activity, DkProCallbackListener.OnLoginProcessListener) in the type DkPlatform is not applicable for the arguments (Activity, new NdMiscCallbackListener.OnLoginProcessListener(){})MainActivity.java/WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dkline 545Java Problem
The method onLoginProcess(int) of type new NdMiscCallbackListener.OnLoginProcessListener(){} must override or implement a supertype methodMainActivity.java/WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dkline 548Java Problem
The type new NdMiscCallbackListener.OnLoginProcessListener(){} must implement the inherited abstract method NdMiscCallbackListener.OnLoginProcessListener.finishLoginProcess(int)MainActivity.java/WWFoeverGameNoll91DK/src/com/wwfoevergamenoll91dkline 545Java Problem

GameNoll91 마켓, 그리고 바이두 Duoku 3개를 하나의 유니티3D 안드로이드 플러그인으로 통합하던중 에러가 발생했었습니다. 현재는 여기다가 UC Game 총 4개를 하나로 통합을 한 상태이긴합니다. 보통은 마켓별로 빌드를 따로 하지 않을까 하는데 저희 팀은 통합해서 하나의 플러그인으로 가자고 일정이 정해졌기에 이런 이슈가 있었습니다.

import com.nd.commplatform…

WCF 메시지를 수락할 수 있는 http://localhost:63397/Service1.svc에서 수신 대기 중인 끝점이 없습니다.

이미지
An unhandled exception of type 'System.ServiceModel.EndpointNotFoundException' occurred in mscorlib.dll

Additional information: 메시지를 수락할 수 있는 http://localhost:63397/Service1.svc에서 수신 대기 중인 끝점이 없습니다. 이것은 흔히 잘못된 주소나 SOAP 동작으로 인해 발생합니다. 자세한 내용은 InnerException(있을 경우)을 참조하십시오.

 WCF Service와 테스트 클라이언트를 만들고 테스트시 IIS Express 등으로 서비스를 호스팅하지 않고 클라이언트만 먼저 실행하면 위와 같은 에러가 발생합니다. 클라이언트를 실행하기전에 웹 서비스를 실행한 후 테스트를 진행하면 됩니다.

WCF Create Helloworld Service and Client

이미지
유니티3D용 게임을 태국에 서비스하는데 있어서 결제 처리를 위한 요구사항중에 웹서비스 처리를 해야할 일이 생겼습니다. C++만 해오다 작년에 오브젝트C와 자바를 거쳐 유니티3D한다고 C#을 하더니 이젠 웹쪽 개발인 웹서비스를 하게되네요. 개발 언어는 C#이긴 한데 이쪽으론 완전 초보라 부족한 내용이 있겠지만 정리를 해봅니다.


1. WCF?

Visual Studio 2010 공식 팀 블로그 - WCF 카테고리
TAEYO.NET - 유수석님의 WCF 강좌

 개념 정리등이 잘 정리된 강좌가 있어서 링크로 대체합니다. 비주얼 스튜디오 2008과 2010으로 진행된 두 강좌를 참고해서 저는 최신인 2012로 진행한 내용을 정리해볼까합니다.


2. 비주얼 스튜디오 익스프레스 2012 for 웹 설치


 먼저 개발에 필요한 IDE가 있어야겠죠. 웹 개발이므로 비주얼 스튜디오 익스프레스 2012 for 웹을 다운로드하고 설치해야합니다. 기존에 비주얼 스튜디오 2012 익스프레스 for 윈도우 데스크탑 설치과정을 정리한게 있으니 참고하시기 바랍니다.


3. WCF Service 프로젝트 생성


 익스프레스 for 웹을 실행해서 New Project의 Visual C# -> WCF에 있는 WCF Service Application을 생성해줍니다. 저는 HelloworldWcfService라고 만들었습니다.

 WCF Service Application 템플릿으로 자동생성을 한 모습니다. 간단한 Helloworld Service를 만들것이지만 템플릿으로 하다보니 이것저것 using 도 많고 소스도 좀 기네요.


4. Helloworld WCF Service 정의 및 구현

namespace HelloworldWcfService { [ServiceContract] public interface IService1 { [OperationContract] string FirstWCFMethod(); } }  자동 생성된 소스는 주석을 거시거나 …

WCF ServiceModel 클라이언트 구성 섹션에서 'IService1' 계약을 참조하는 기본 끝점 요소가 없습니다.

이미지
Additional information: ServiceModel 클라이언트 구성 섹션에서 'IService1' 계약을 참조하는 기본 끝점 요소가 없습니다. 응용 프로그램에 대한 구성 파일이 없거나, 이 계약과 일치하는 끝점 요소가 클라이언트 요소에 없기 때문입니다.


<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:63397/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
                name="BasicHttpBinding_IService1" />
        </client>
    </system.serviceModel>
</configuration>

 WCF 개념 파악할 때 끝점(EndPoint)와 계약(Contract)등의 내용이 있었는데 Svcutil로 생성했던 output.config 파일이 위와 같이 관련된 정로를 가지고 있더군요. 그래서 위 스샷과 같이 프로…

WCF does not exist in the namespace 'System' (are you missing an assembly reference?)

이미지
Error1The type or namespace name 'ServiceModel' does not exist in the namespace 'System' (are you missing an assembly reference?)D:\WCF\WCFConsoleApplication\WCFConsoleApplication\Service1.cs149WCFConsoleApplication

Svcutil로 만든 WCF 클라이언트 소스 파일을 C# 콘솔 어플리케이션에서 사용하던중 위와 같은 에러가 발생했습니다. 자동 생성된 코드에는 using System.ServiceModel; 이없네요. 그렇다고 자동 생성된 코드를 수정하면 안되겠죠.

 C++의 추가 라이브러리 종속성을 프로젝트 설정에 추가하듯이 C#에서는 레퍼런스(References)라는 곳에 추가를 해줘야하는 듯 싶네요. 위와 같이 기본 생성된 콘솔 어플리케이션에는 System.ServiceModel이 없습니다.

 마우스 우클릭 또는 Project 메뉴의 'Add Reference'를 선택합니다.

 추가하고자 하는 어셈블리를 검색해서 왼쪽에 체크를 해준 후 OK를 눌러 추가합니다.

 어셈블리 레퍼런스가 추가되었습니다.

svcutil.exe 위치 및 오류: 출력 파일을 만들 수 없습니다.

이미지
WCF 서비스를 만들고 연동할 클라이언트를 만들기 위해 Svcutil(ServiceModel Metadata Util)을 실행했더니 위와같이 오류가 발생했습니다.

 일단 msdn에는 'ServiceModel Metadata 유틸리티 도구는 Windows SDK 설치 위치인 C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin에 있습니다.' 라고 하지만 스샷과 같이 v6.0이 아닌 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools 인 v8.0a 에 있더군요. 버전마다 다르겠고 뭐 파일이야 검색해서 찾으면 되겠습니다.

 에러도 간단한 문제였습니다. cmd를 관리자 권한으로 실행해주면 되는거죠.

 output.config 파일과 Service1.cs가 생성되었습니다.

svcutil.exe /d:d:\ http://localhost:63397/Service1.svc?wsdl

 마지막으로 관리자 권한이 필요없는 생성하려면 위와같이 /d 옵션을 추가해서 다른 디렉터리를 지정하면 됩니다.