할당량을 늘리려면 적합한 바인딩 요소에서

MaxReceivedMessageSize 속성을 사용하십시오.

실버라이트에서 웹서비스로 데이터를 불러올때 용량(?)초과로 인한오류 발생

해결방법입니다.

 

실버라이트 ServiceReferences.ClientConfig 파일

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="LargeBuffer" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address=""
                binding="basicHttpBinding" bindingConfiguration="LargeBuffer"
                contract="ServiceRef.ISilverlightService" name="LargeBuffer" />
        </client>
    </system.serviceModel>
</configuration>

 

 

Web.config 파일

....
  <system.serviceModel>
   
    <!--Jaedoo 최소용량때문에 추가한거임-->
    <bindings>
      <basicHttpBinding>
        <binding name="LargeBuffer" receiveTimeout="00:01:00" openTimeout="00:01:00" sendTimeout="00:01:00"
                       closeTimeout="00:010:00"
                      maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
                        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
       
        </binding>
      </basicHttpBinding>
    </bindings>

    <!--최소용량때문에 추가한거임-->

   
   
    <behaviors>
      <serviceBehaviors>
        <behavior name="클래스.Web.SilverlightServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <!--Jaedoo 최소용량때문에 추가한거임-->
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
       
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="클래스.Web.SilverlightServiceBehavior"
       name="클래스.Web.SilverlightService">
        <endpoint address="http://localhost:56445/SilverlightService.svc" binding="basicHttpBinding"

contract="클래스.Web.ISilverlightService"                
                  name="LargeBuffer"  >
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

SQL Server Compact Edition 사용 했을때 오류 해결방법 및 SQLServerCompact 3.5 설치

*비주얼스튜디오 2008와 SQLServerCompact 3.5로 개발했으며 옴니아에서 테스트 하였습니다.

 

오류화면

image

위의 오류는 와 SQLServerCompact 3.5 사용했는데 스마트폰에 System.Data.SqlServerCe 파일이 참조가 안되 있어서 나는 오류입니다.

 

해결방법

image

image

실제로 빌드 했을 때 System.Data.SqlServerCe.dll 이 파일도 함께 복사를 하셔야 합니다.

로컬복사 False 를 True로 주시면 빌드 될 때 참조한dll도 같이 복사됩니다.

 

요렇게 했는데도 아래와 같이 오류가 난다면..스마트폰에 SQLServerCompact 3.5가 설치 안되어져 있는겁니다.

 image

 

설치파일경로

C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\wce500\armv4i
안의 파일설치

기본적으로 Core만 설치해도 돌아가는걸로 알고 있습니다.

sqlce.dev.KO.ppc.wce5.armv4i.CAB 깔면 스마트폰에서 SQLServerCompact 3.5 데이터 쿼리조회도 가능합니다.

image

 

제 핸드폰은 옴니아라서 ppc 만 설치해줬습니다

-sqlce.dev.KO.ppc.wce5.armv4i.CAB

-sqlce.ppc.wce5.armv4i.CAB

-sqlce.repl.ppc.wce5.armv4i.CAB

http://msdn.microsoft.com/ko-kr/library/ak58kz04.aspx

[클릭원스 배포시  프로젝트(dll)을 필요 시 다운로드 하는 방법]

모듈A

image

 

부모프로젝트

image

 

[작성방법]
1.우선 모듈A를 참조한다
2.그리고 배포시 부모프로젝트에서 모듈A를 빼고 배포한다 (제외(?))시키는 방법은 아래 참고

image

어플리케이션 파일을 선택한다
 image

모듈A를 include하고 다운로드 그룹 이름을 지정한다

추후에 다운 받을 때 다운로드 그룹 이름을 이용해서 다운받는다

[부모프로젝트에서 모듈A를 요청할때 ]

Dictionary<String, String> DllMapping = new Dictionary<String, String>();
private int childFormNumber = 0;

public MDIParent1()
{
    InitializeComponent();
    DllMapping["ClickOnceLibrary"] = "ClickOnceLibrary";
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}

 

 

//클릭이벤트 여기서 호출
       private void toolStripButton4_Click(object sender, EventArgs e)
       {

           try
           {
               Insa_module.TestClass dc = new Insa_module.TestClass();
               Insa_module.Insa2 insa = new Insa_module.Insa2();
               insa.Show();
               MessageBox.Show("Message: " + dc.Message);
           }
           catch (Exception ex) {

               MessageBox.Show(ex.Message);
           }
       }

/*
* Use ClickOnce APIs to download the assembly on demand.
*/
       Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
       {
           Assembly newAssembly = null;

           if (ApplicationDeployment.IsNetworkDeployed)
           {
               ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment;

               // Get the DLL name from the Name argument.
               string[] nameParts = args.Name.Split(',');
               string dllName = nameParts[0];
               string downloadGroupName = DllMapping[dllName];

               try
               {
                   deploy.DownloadFileGroup(downloadGroupName);
               }
               catch (DeploymentException de)
               {
                   MessageBox.Show("Downloading file group failed. Group name: " + downloadGroupName + "; DLL name: " + args.Name);
                   throw (de);
               }

               // Load the assembly.
               // Assembly.Load() doesn't work here, as the previous failure to load the assembly
               // is cached by the CLR. LoadFrom() is not recommended. Use LoadFile() instead.
               try
               {
                   newAssembly = Assembly.LoadFile(Application.StartupPath + @"\" + dllName + ".dll");
               }
               catch (Exception e)
               {
                   throw (e);
               }
           }
           else
           {
               //Major error - not running under ClickOnce, but missing assembly. Don't know how to recover.
               throw (new Exception("Cannot load assemblies dynamically - application is not deployed using ClickOnce."));
           }

           return (newAssembly);
       }
   }

서비스에 대한 액세스를 허용하는 clientaccesspolicy.xml 파일을 만듭니다. 다음 구성을 사용하면 다른 모든 도메인에서 현재 도메인의 모든 리소스에 액세스할 수 있습니다.

clientaccesspolicy.xml 
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>
 
crossdomain.xml 파일을 사용하여 도메인 간 액세스를 허용하려면
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-http-request-headers-from domain="*" headers="*"/> </cross-domain-policy>
 --------------------------------------------------------------------------------------------------------------
 
 
접근하기 테스트
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
namespace SilverlightApplicationCardTest
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            WebClient wc = new WebClient();
            wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
          //URL 여기에 clientaccesspolicy.xmlcrossdomain.xml 이 있어야 합니다

            wc.OpenReadAsync(new Uri("접근할려는 URL"));            
        }
        void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                Stream responseStream = e.Result;
                // Continue working with responseStream here...
                StreamReader sr = new StreamReader(responseStream);
                this.txt.Text = sr.ReadLine();
            }
        }

    }
}

실버라이트 웹서버에서 작동안될때(MIME 형식 설정)

 

 

image

 

 

 

 

image

image




<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<title></title>

<script language="javascript">

// getPageSize() 메소드는 lightbox2.04 를 참고 하였습니다.

function getPageSize() {


var xScroll, yScroll;


if (window.innerHeight && window.scrollMaxY) {

xScroll = window.innerWidth + window.scrollMaxX;

yScroll = window.innerHeight + window.scrollMaxY;

} else if (document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac

xScroll = document.body.scrollWidth;

yScroll = document.body.scrollHeight;

} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari

xScroll = document.body.offsetWidth;

yScroll = document.body.offsetHeight;

}


var windowWidth, windowHeight;


if (self.innerHeight) {



// all except Explorer

if (document.documentElement.clientWidth) {

windowWidth = document.documentElement.clientWidth;

} else {

windowWidth = self.innerWidth;

}

windowHeight = self.innerHeight;

} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode

windowWidth = document.documentElement.clientWidth;

windowHeight = document.documentElement.clientHeight;

} else if (document.body) { // other Explorers

windowWidth = document.body.clientWidth;

windowHeight = document.body.clientHeight;

}


// for small pages with total height less then height of the viewport

if (yScroll < windowHeight) {

pageHeight = windowHeight;

} else {

pageHeight = yScroll;

}


// for small pages with total width less then width of the viewport

if (xScroll < windowWidth) {

pageWidth = xScroll;

} else {

pageWidth = windowWidth;

}


return [pageWidth, pageHeight];

}







//리사이즈시 다시체크

function CheckTicket() {

//alert("리사이즈체크")

var arrayPageSize = getPageSize()

document.getElementById("overlay").style.width = arrayPageSize[0];

document.getElementById("overlay").style.height = arrayPageSize[1];

}







//덮기 테스트

function Test() {

var arrayPageSize = getPageSize()

document.getElementById("overlay").style.width = arrayPageSize[0];

document.getElementById("overlay").style.height = arrayPageSize[1];

}

window.onresize = CheckTicket //사용자가 윈도우 크기를 조정하면 다시 그사이즈에 맞게 덮어줍니다.

</script>


<!?아래는 반투명 스타일 시트-->

<style>


#overlay{

position:absolute ; left:0px; top:0px; width:10px; height:10px; z-index:100; filter:alpha(opacity=50);

background-color: #000;

}

</style>

</head>

<body onload="Test()">


<br />

전체화면 덮는 레이어 테스트<br />


<img src="image.jpg" style="width: 422px; height: 186px" />

<div id="overlay"> ß전체를 덮을 레이어

</div>


<p>

&nbsp;</p>

<p>

</p>


</body>

</html>

 

실버라이트 프로젝트에서 속성을 클릭합니다.

 image

 

실버라이트 프로젝트의 속성 선택

 image

브라우저 외부에서 응용 프로그램 실행사용 체크

 

이설정값들은

 image

OutOfBrowserSettings.xml에 저장됩니다.

설치옵션을 숨기려면 ShowInstallMenuItem 특성을 찾아 값을 "False"로 변경합니다.

 

실행결과

image

마우스오른쪽을 클릭하면 설치화면이 나옵니다.

 image

[외부에서 실행된 화면]

image

 

image

 

위와 같이 구성되어져 있을 때

UserInfo 에서 website에 있는 연결정보를 가져오기

 

 

 

1.

웹컨피그에서 접속정보가 아래와 같이 정의되어져 있습니다.

<connectionStrings>

<add name="ConnectionString1" connectionString="접속문자열"

providerName="System.Data.OracleClient" />

</connectionStrings>

 

2.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Web.Configuration;

 

namespace UserInfo

{

 

public class Class1

{

string _url;

public Class1() {

DbconnUrl = "클래스에서 가져오는 디비 정보:" + WebConfigurationManager.ConnectionStrings

["ConnectionString1"].ConnectionString;

 

}

public string DbconnUrl

{

 

set {

_url = value;

 

}

get {

 

return _url;

}

 

}

 

}

}

 

위와같이 가져옴 끗~

 

저장

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Configuration;

 

namespace WebApplicationTest

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

 

}

 

protected void Button1_Click(object sender, EventArgs e)

{

DataSet1TableAdapters.ImageTableTableAdapter adapter = new WebApplicationTest.DataSet1TableAdapters.ImageTableTableAdapter();

byte[] bt = this.FileUpload1.FileBytes; //이미지를 바이트로 저장하기

DataSet1.ImageTableDataTable dt = new DataSet1.ImageTableDataTable();

DataSet1.ImageTableRow row = dt.NewImageTableRow();

row.ImageContent = bt;

 

dt.AddImageTableRow(row);

adapter.Update(dt);

 

 

}

}

불러오기

InHandler.ashx 파일생성

<%@ WebHandler Language="C#" Class="InHandler" %>

  

using System;

using System.Web;

  

public class InHandler : IHttpHandler {

  

public void ProcessRequest (HttpContext context) {

  

가져오기 쿼리

  

System.Data.DataTable dt = op.GetDataTable(); //가져온 데이터

  

byte[] pic = (byte[])dt.Rows[0]["FILE_ATTACH"];//이미지를 저장하고 있는 필드

context.Response.OutputStream.Write(pic, 0, pic.Length);

context.Response.End();

}

  

public bool IsReusable {

get {

return true;

}

}

  

}

  

  

실제사용은 간단하게

<img src=" InHandler.ashx"> 이렇게 하면 끝~

URL: http://msdn.microsoft.com/ko-kr/library/system.data.oracleclient.oracletransaction.aspx

 


    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        connection.Open();

        OracleCommand command = connection.CreateCommand();
        OracleTransaction transaction;

        // Start a local transaction
        transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
        // Assign transaction object for a pending local transaction
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
            command.ExecuteNonQuery();
            command.CommandText =
                "INSERT INTO Dept (DeptNo, Dname, Loc) values (60, 'ENGINEERING', 'KANSAS CITY')";
            command.ExecuteNonQuery();
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception e)
        {
            transaction.Rollback();
            Console.WriteLine(e.ToString());
            Console.WriteLine("Neither record was written to database.");
        }
    }

+ Recent posts